Существует ли существующая библиотека, которая позволяет мне аннотировать метод Java как @Const, так что компилятор (используя apt я предположим) будет отмечать ошибку, если он обновляет поле или вызывает метод non @Const на поле; и аннотировать параметр как @Const, так что метод accepting не может вызывать какой-либо из своих методов не @Const или обновлять любое из его полей?
(В принципе, попытка добавить const-correctness к Java с помощью аннотаций, есть некоторые очевидные детали, которые не рассматриваются в вышеприведенном вопросе, такие как назначение/из параметра @Const-typed и т.д.)
Я нашел это: 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 = ...
.