我想使用Lombok的@NonNull
注释来自动生成方法参数的null检查代码,同时使用FindBugs的@NonNull
来使用静态分析工具,并在任何情况下生成适当的警告。
到目前为止,我需要做以下工作:
public void doSomething (@lombok.NonNull @edu.umd.cs.findbugs.annotations.NonNull Object parameter)
{
// Do something
}
这很难看,所以我想避免使用这种语法。我读过嵌套注释(这里和这里),但我似乎找不到一种方法来创建我自己的自定义注释,将NonNull
注释都作为嵌套注释。我是不是想做一些不起作用的事情?
这是我的最新尝试:
@Documented
@Retention (RetentionPolicy.CLASS)
@Target (value={ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE})
public @interface MyNonNull
{
public lombok.NonNull lombokNonNull () default @lombok.NonNull;
public edu.umd.cs.findbugs.annotations.NonNull findBugsNonNull () default @edu.umd.cs.findbugs.annotations.NonNull;
}
您不能将注释与自定义注释"合并",但是您可以在类作用域上使用@ParametersAreNonnullByDefault
,这应该允许推断edu.umd.cs.findbugs.annotations.NonNull
。
我认为您的两个链接都不会对您有所帮助。您需要使用自定义注释从两者进行扩展,但您甚至不能从其中一个进行扩展,因为所有注释都有annotation的隐式extends子句。