如何将@Nonnull批注应用于包括类型使用和类型参数在内的所有内容?

时间:2019-04-26 02:43:12

标签: java intellij-idea nullpointerexception annotations

我想告诉IntelliJ,除非默认情况下用@Nullable注释,否则所有内容默认都不为空。

使用JSR305库和下面的代码,我们可以部分完成它。

import javax.annotation.Nonnull;
import javax.annotation.meta.TypeQualifierDefault;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Nonnull
@TypeQualifierDefault({ElementType.FIELD, ElementType.LOCAL_VARIABLE, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@interface NonnullByDefault {
}

(另请参见:https://www.jetbrains.com/help/idea/parametersarenonnullbydefault-annotation.html

但是,当前JSR305的@Nonnull不支持TYPE_USETYPE_PARAMETERS,这不允许像var list = new ArrayList<@Nonnull String>();这样的声明。这会产生错误:'@ Nonnull'不适用于类型使用

因此,即使我将它们包含在TypeQualifierDefault中,上述@NonnullByDefault注释也不适用于类型使用和类型参数。没有显式注释,有什么方法可以使它们不为空?

1 个答案:

答案 0 :(得分:0)

正如mernst用户在评论中指出的那样,使用javax.annotation.Nonnull可能不是最佳选择。

除此之外,我担心答案是IntelliJ不允许您打算使用的那种检查。

因此,在这一点上,最有前途的选择是使用所说的checkerframework