为什么@NotNull注解不能消除警告?

4
我编写了一个实现comparable接口的类。我在方法参数中使用了@NotNull注释来抑制警告,但仍然显示一个警告。IDE自动导入了com.sun.istack.internal.NotNull包以用于@NotNull。为什么会发生这种情况?如果不使用此注释,如何消除此警告? 我正在使用Java 8 SE的Inteij Ultimate。 以下是我的代码片段。

1
尝试向 compareTo 方法添加 @Nonnull (javax.annotation.Nonnull)。 - Olivier Poulin
正确,javax.annotation.NonNull 是正确的选择。 - uraimo
1
@uraimo 我在 javax.annotation 包中找不到任何类似于 NotNullNonnull 的注解。当我尝试写下 javax.annotation.NotNulljavax.annotation.Nonnull 时,会出现错误。 - seal
更新了我的回答,抱歉这个问题有点容易出现打字错误 :) - uraimo
2个回答

5

显然,你应该使用

public int compareTo(@NonNull Node node) {

代替
public int compareTo(@NotNull Node node) {

编译器可以确定代码路径可能会接收到空值,而无需调试NullPointerException。这些注释需要安装Checker Framework或者您可以尝试其他答案所说的方法。来自此处

1
不是关于Android的问题,即使IDE处于暗模式下 :) - uraimo
1
@uraimo 哎呀,我选错标签了! xD 我会改的。 - Olivier Poulin
@uraimo 编辑了定义/链接,使之更符合原帖作者的需求 :) - Olivier Poulin
1
天哪...我认为所有排列方式都作为真正的类可用...NotNull、NonNull、Notnull等等...他的问题是他没有导入IntelliJ接受的其中一个注释。 - uraimo
抱歉,Nonnull这个东西不存在。我也尝试导入javax.annotation.包,但是没有像NonnullNotNull这样的注解。我的jdk版本有问题吗?我目前正在使用的是java版本“1.8.0_45”。 - seal
更新答案,抱歉。 - uraimo

1
改变你的导入方式,你可以使用Intellij自带的com.intellij.annotations.NotNulljavax.annotation.Nonnulljavax.validation.constraints.NotNull
这是一个IntelliJ的特性,实际上可以配置使用哪个可空/非空注解,请参考this guide
如果这样做没有解决问题,而且信息似乎暗示了这一点,请尝试删除@override,因为这会向一个在超类中没有该注解的参数添加注解。

1
javax.annotation 包中没有 @NotNull@Nonnull 注解。我已根据您提供的链接更改了配置,但我的 IDE 仍然无法在该包中找到这些注解。 - seal
除了ManagedBean之外,我有这些注释:http://grepcode.com/snapshot/repo1.maven.org/maven2/org.glassfish/javax.annotation/3.1 - seal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接