Java注释处理工具@NoNull



我想创建一个注释,限制开发人员将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

最新更新