nha*_*man 4 java intellij-idea
我有以下课程*:
public class MyClass {
@Nullable
private String mString;
/* ... */
public boolean contains(@NotNull final String text) {
if(!isNullOrEmpty()) {
return mString.contains(text);
} else {
return false;
}
}
public boolean isNullOrEmpty() {
return mString == null || mString.isEmpty();
}
}
Run Code Online (Sandbox Code Playgroud)
现在mString.contains(text),IntelliJ警告我mString可能null,即使它确保不是.我注意到JetBrains有@Contract注释.有没有办法我可以这样注释isNullOrEmpty(),当方法返回时我没有得到这个警告true?
我希望@Contract注释能够接近Java Modeling Language功能,如下所示:
//@ ensure \result == true ==> mString != null;
public boolean isNullOrEmpty() {
return mString == null || mString.isEmpty();
}
Run Code Online (Sandbox Code Playgroud)
此外,我想isNullOrEmpty()保持无参数,因为它是公共API的一部分.
*仅用于演示目的的虚构类:)实际代码使用更复杂的类.
你mString是可变的,所以在检查' isNullOrEmpty'和访问' 之间' mString.contains'mString值可以改变.因此,这就是为什么@Contract注释仅适用于方法参数的原因.@Contract如果您的方法isNullOrEmpty如下,则可以使用:
public isNullOrEmpty(String pString) {}
Run Code Online (Sandbox Code Playgroud)