作者:星空下的舞者j | 来源:互联网 | 2023-05-21 19:08
我有以下课程*:
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();
}
}
现在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();
}
此外,我想isNullOrEmpty()
保持无参数,因为它是公共API的一部分.
*仅用于演示目的的虚构类:)实际代码使用更复杂的类.
1> anstarovoyt..:
你mString
是可变的,所以在检查' isNullOrEmpty
'和访问' 之间' mString.contains
'mString值可以改变.因此,这就是为什么@Contract
注释仅适用于方法参数的原因.@Contract
如果您的方法isNullOrEmpty
如下,则可以使用:
public isNullOrEmpty(String pString) {}