Getter和@Nonnull(Getter and @Nonnull)

2019-07-30 09:16发布

我从Eclipse的警告,我知道我可以取消警告删除,但我更愿意理解是什么使得它的东西也可能是零。

package-info.java

@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'
    }
}

我不知道为什么我得到这样的警告...

PS:

public Test( @Nonnull final String s ) { - >的NULL的含量标注为冗余的适用于该位置的默认

@Nonnull private final String s; - >没什么变化

Answer 1:

问题是,@Nonnull标注有场无影响。 它仅支持:

  • 方法参数
  • 方法的返回值
  • 局部变量(一个码块内)

请参阅Eclipse文档

所以很明显 - 作为非空不上的字段检查 - 编译器不知道Test.s为非空和抱怨它。

显而易见的解决方案确实是添加上现场访问@SuppressWarnings(“空”)(或方法,如果它是一个简单的getter):

public String getS() {
    @SuppressWarnings("null")
    @Nonnull String s = this.s;
    return s;
}


文章来源: Getter and @Nonnull