gpt4 book ai didi

java - JetBrains @Contract 使用字段

转载 作者:搜寻专家 更新时间:2023-11-01 01:25:54 25 4
gpt4 key购买 nike

我有以下类(class)*:

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,即使它保证它不是't。我注意到 JetBrains 有 @Contract注解。有没有一种方法可以注释 isNullOrEmpty(),以便在方法返回 true 时不会收到此警告?

我希望 @Contract 注释将接近 Java Modeling Language功能,像这样:

//@ ensure \result == true ==> mString != null;
public boolean isNullOrEmpty() {
return mString == null || mString.isEmpty();
}

此外,我希望 isNullOrEmpty() 保持无参数,因为它是公共(public) API 的一部分。

*只是一个用于演示目的的虚构类 :) 实际代码使用了一个更复杂的类。

最佳答案

您的 mString 是可变的,因此在检查“isNullOrEmpty”和访问“mString.contains”之间可以更改 mString 值。所以这就是为什么 @Contract 注解只对方法参数起作用的原因。如果您的方法 isNullOrEmpty 看起来像这样,您可以使用 @Contract:

public boolean isNullOrEmpty(String pString) {}

关于java - JetBrains @Contract 使用字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28537640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com