Java Getter和@Nonnull
我从eclipse中得到了一个警告,我知道我可以使用suppress warning将其删除,但我更愿意理解是什么使得它可以为null package-info.javaJava Getter和@Nonnull,java,null,annotations,non-nullable,Java,Null,Annotations,Non Nullable,我从eclipse中得到了一个警告,我知道我可以使用suppress warning将其删除,但我更愿意理解是什么使得它可以为null package-info.java @ParametersAreNonnullByDefault package test; import javax.annotation.ParametersAreNonnullByDefault; test.java package test; public class Test { public stati
@ParametersAreNonnullByDefault
package test;
import javax.annotation.ParametersAreNonnullByDefault;
test.java
package test;
public class Test {
public static void main( final String[ ] args ) {
System.out.println( new Test( "a" ).getS( ) );
}
private final String s;
public Test( final String s ) {
this.s = s;
}
public String getS( ) {
return this.s;//Null type safety: The expression of type String needs unchecked conversion to conform to '@Nonnull String'
}
}
我不明白为什么我会收到这个警告
附言:
public Test(@Nonnull final String s){
->空值注释与应用于此位置的默认值是冗余的
@Nonnull private final String s;
->没有任何更改问题是@Nonnull注释对字段没有影响。它仅在以下情况下受支持:
- 方法参数
- 方法返回值
- 局部变量(在代码块内)
Javadoc应该能够提高理解能力:(另外,要警惕设置程序的流畅返回值——它们不“合法”JavaBean setter和各种工具可能会对此抱怨,甚至看不到它们。在我看来,最好将JavaBean和fluent方法分开。我如何才能提高对这么简单的代码的理解……我只是简单地描述了这些方法,因为你看不到javadoc页面上的内容。通过删除多余的javadoc。你没有吗测试包中的@ParametersAreNonnullByDefault表示法也是如此?Eclipse4.3为字段()添加了基于注释的空值分析我不使用Eclipse的注释…我使用的是来自javax的注释。我告诉过Eclipse,但你告诉我它只是假设我更改了名称。有没有办法告诉我它的行为不完全相同?嗯,我不确定我是否收到了你的第一条注释…你使用的注释是无关的(只需告诉Eclipse完整的类名)。您也可以使用自己的库,这样就不必导入外部库。有关字段的null批注支持的当前状态,请参阅。
public String getS() {
@SuppressWarnings("null")
@Nonnull String s = this.s;
return s;
}