我想创建一个注释,限制开发人员将null指定为参数,该参数已用@NoNull进行了注释
例如,如果我创建这个方法:
public void printLine(@NoNull String line) {
System.out.println(line);
}
在方法调用中,如果用户为行:printLine(null);
指定null,我希望出现错误
我使用APT的时间很短,我想知道如何做到这一点(如果可能的话)?
这是我迄今为止创建的注释:
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.SOURCE)
public @interface NoNull {}
编译时将很难检查,因为您真正处理的是运行时值。如果你想创建注释来自动添加代码来检查这些东西,你应该看看项目lombok:
http://projectlombok.org/
它使用注释处理器将代码添加到bean中以执行各种操作。
例如:
@Getter @Setter
private int id;
注释处理器会自动将get/set方法添加到您的bean中。
我不认为它有空检查,但你应该能够添加它并贡献它
另一种选择是使用验证jsr,尽管这需要在运行时显式验证,但您可以使用代理或AOP来实现这一点。
@NotNull @Min(1)
public void setId(Integer id)
重点不是仅仅为了可读性而使用注释,而是在编译时使用APT 强制执行注释
考虑到null是一个运行时工件,我不知道如何在"编译时"强制执行null检查
相反,你必须修改你的类,apt不是这样做的工具,至少它本身不是。它的存在是为了从源文件中提取有关带注释元素的信息。但是,要强制执行@Null
限制,您需要修改正在运行的类。
您可以做的一件事是使用apt提取有关注释参数的信息,然后使用aspectj之类的工具在运行时修改这些类以检查参数值。
但对于一个SO问题来说,这个话题太宽泛了。
@Nullable,@Nonnull位于包中:javax.annotation
结账番石榴,它有一些不错的东西是类型安全:http://code.google.com/p/guava-libraries/wiki/GuavaExplained