是否存在允许我将 Java 方法注释为 @Const 的现有库,以便编译器(我假设使用 apt)在更新字段或调用非 @Const 方法时标记错误 field ;并将参数注释为@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 方法。但是从 processPerson
中调用 p.setName()
会被标记为错误。
请注意,这与 final
有很大不同:如果参数定义为 final Person p
,则对 p
的任何赋值都会被非法的,但是修改 p
引用的内容仍然是完全有效的(使用 p.setName(...)
或者更直接地使用 p.name = ...
。
最佳答案
JSR-305应该可以满足您的需求
就个人而言,我会看看是否可以使用 Hibernate Validator - Bean Validation (JSR-303)为了那个原因。这是一个很棒的小库(不依赖于 hibernate ,它很小)并且它能很好地保持数据清洁。查看documentation .
一个谷歌人也开始了 Contracts for Java最近,但它可能还不是生产质量。
关于java - 使用注释的 Java 中的 Const 正确性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4912532/