问题
I get a warning from eclipse and I know I can remove it with suppress warning but I'd prefer to understand what makes it thing it could be null.
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'
}
}
I don't get why I get this warning...
PS:
public Test( @Nonnull final String s ) {
-> The nullness annotation is redundant with a default that applies to this location
@Nonnull private final String s;
-> nothing changes
回答1:
The problem is that the @Nonnull annotation has no effects on fields. It is only supported for:
- Method parameters
- Method return values
- Local variables (within a code block)
See eclipse Documentation
So quite obviously - as Nonnull is not checked on fields - the compiler doesn't know that Test.s is Nonnull and complains about it.
The obvious solution would indeed be to add a @SuppressWarnings("null") on the field access (or on the method, if it's a simple getter):
public String getS() {
@SuppressWarnings("null")
@Nonnull String s = this.s;
return s;
}
来源:https://stackoverflow.com/questions/11462257/getter-and-nonnull