在具有可空返回类型的方法上放置@Nullable的位置?

使用javax.annotation.Nullable将方法标记为“可能返回null值”时,在哪里放置@Nullable注释? 在方法上,还是返回类型?

是否有任何技术差异,或者这是严格的风格问题?

风格A:

 @Nullable public Object blah() { ... } 

风格B:

 public @Nullable Object blah() { ... } 

这完全是一种风格问题。

无论您在源代码中的哪个位置编写注释,注释实际上都是在方法上。 这是因为javax.annotation.Nullable定义上的@Target元注释,这使得javax.annotation.Nullable成为方法注释。 您可以在任一位置编写注释,因为Java语言规范语法允许方法注释穿插方法修饰符(如public

我认为在返回类型之前放置注释更清楚。 毕竟,它是非null的返回类型。 说方法本身是非空的是没有意义的。

在返回类型之前放置注释还有另一个重要好处:您的代码与定义为类型注释的Nullable版本兼容。 类型注释是在Java 8中引入的。它们比方法注释更具表现力,它们可以实现更强大的检查。 例如,Eclipse和Checker Framework支持的Nullable注释是类型注释。

选项类型将为您提供帮助。 返回类型的Option表示该方法可以返回Object,或者它可以返回None或null类型的特殊值。