我对Java 5注解还是个新手,我很好奇这两种注解是否有可能实现:
这个注解将为您生成一个简单的getter和setter。
@attribute
private String var = "";@NotNull注释指示变量不能为空,因此您不必每次都编写样板代码。
/*
* @param s @NotNull
*/
public void setString(String s){
...
}这两种方法都行得通吗?如果可以,我似乎会首先为它们编写注释。因为我在阅读文档时并没有看到太多关于这些的内容,所以我假设这并不是注释的真正意义所在。这里的任何方向都将不胜感激。
发布于 2008-12-08 10:31:39
注释处理发生在抽象语法树上。这是解析器创建并由编译器处理的结构。
当前的规范(链接在后面)说注释处理器不能改变抽象语法树。这样做的后果之一是它不适合进行代码生成。
如果您喜欢这种功能,那么可以看看XDoclet。这将为您提供我认为您正在寻找的代码生成预处理。
对于您的@NonNull示例,JSR-305是一个用于增强软件缺陷检测的set of annotations,它包括@NonNull和@CheckForNull以及许多其他工具。
编辑:Project Lombok恰好解决了getter和setter生成的问题。
发布于 2010-02-03 02:06:02
Getters/Setters:是的,这是可能的。Project Lombok (http://projectlombok.org/index.html)定义了用于生成getter/setter等的注释。
举个例子
@lombok.Data;
public class Person {
private final String name;
private int age;
}将生成getName (没有设置器,因为变量是最终的)和getAge/setAge。它还将生成equals、hashCode、toString和初始化必需字段的构造函数(本例中为name)。添加@AllArgsConstructor将生成一个初始化这两个字段的构造函数。使用@Value而不是@Data将使对象不可变。
还有其他注释和参数让您可以控制访问权限( getter是受保护的还是公共的)、名称(getName()还是name()?)等等。例如,我非常喜欢builders和extension methods的注释。
Lombok非常容易使用:
NotNull:这是由findbugs和IDEA集成开发环境支持的,也许其他
发布于 2008-12-08 01:21:03
中有没有办法使用注解来代替访问器?
简而言之,不,Java5/6编译器不支持这一点,第三方很难以编译器不可知的方式添加这样的支持。
为了更好地处理注释,我将从JUnit开始。如果您为版本3(预注释)和版本4(基于注释)编写代码,您很快就会掌握框架如何将基于命名模式的约定替换为基于注释的约定。
有关更生动的示例,请比较EJB2和EJB3。
https://stackoverflow.com/questions/348408
复制相似问题