Существует ли существующая библиотека, которая позволяет мне аннотировать Java-метод как @Const, так что компилятор (используя apt, я полагаю) сообщит об ошибке, если обновит поле или вызовет не-Const метод для поле; и аннотировать параметр как @Const, чтобы принимающий метод не мог вызвать ни один из его не-Const методов или обновить любое из его полей?
(В основном, попытка добавить const-корректность в Java с помощью аннотаций; есть некоторые очевидные детали, не затронутые в вопросе выше, такие как присвоение / из параметра типа @ Const и т. Д.)
Я нашел это: http://confluence.atlassian.com/pages/viewpage.action?pageId=182158080, но кажется, что он доступен только как часть IDEA.
После запроса на разъяснение ниже приведен пример кода, чтобы показать, что я имею в виду:
class Person {
private String name;
private String address;
@Const public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
... etc. for address
}
Теперь, если я определю метод, такой как:
void processPerson(@Const Person p)
строка типа: p.getName()
будет в порядке в processPerson
, поскольку getName
был помечен как метод @Const. Но вызов p.setName()
изнутри processPerson
будет помечен как ошибка.
Обратите внимание, что это очень отличается от final
: если параметр был определен как final Person p
, любое присвоение p
было бы недопустимым, но все равно совершенно правильно изменить то, к чему относится p
(либо используя p.setName(...)
или даже более напрямую, с p.name = ...
.