我有以下课程*:
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建模语言功能,如下所示:
//@ ensure \result == true ==> mString != null;
public boolean isNullOrEmpty() {
return mString == null || mString.isEmpty();
}
此外,isNullOrEmpty()
由于它是公共API的一部分,因此我想保持不变。
*仅是一个虚构类,用于演示:)实际代码使用了更复杂的类。
您mString
是可变的,因此可以在检查' isNullOrEmpty
'和访问' mString.contains
'之间更改mString值。这就是为什么@Contract
注释仅适用于方法参数的原因。您可以使用以下@Contract
方法isNullOrEmpty
:
public isNullOrEmpty(String pString) {}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句