我想告诉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_USE
和TYPE_PARAMETERS
,这不允许像var list = new ArrayList<@Nonnull String>();
这样的声明。这会产生错误:'@ Nonnull'不适用于类型使用。
因此,即使我将它们包含在TypeQualifierDefault中,上述@NonnullByDefault
注释也不适用于类型使用和类型参数。没有显式注释,有什么方法可以使它们不为空?
答案 0 :(得分:0)
正如mernst用户在评论中指出的那样,使用javax.annotation.Nonnull
可能不是最佳选择。
除此之外,我担心答案是IntelliJ不允许您打算使用的那种检查。
因此,在这一点上,最有前途的选择是使用所说的checkerframework。