gpt4 book ai didi

java - 我如何注释我的辅助方法,以便 Eclipse 知道它的参数在返回 true 时是非空的?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:35:29 26 4
gpt4 key购买 nike

我有一个辅助方法,hasContent(String),如果它的参数既非空又包含至少一个非空白字符,则返回 true。我刚刚在 Eclipse 中启用了 null 分析,我发现当我使用此方法执行一段代码时,该代码块以我的辅助函数的结果为条件,表明该字符串具有内容(因此 cannot 为空),尽管如此,Eclipse 仍会提示我的字符串可能仍为空。

辅助函数

public static boolean hasContent(String text) {
if (text == null)
return false;
if (text.trim().length() == 0)
return false;
return true;
}

使用示例

...
String dataString;

try {
dataString = readStringFromFile("somefile.txt");
} catch (IOException e) {
System.err.println("Failed to read file due to error: " + e);
dataString = null;
}

// At this point dataString may be null

if (hasContent(dataString)) {

// At this point dataString must be non-null, but Eclipse warns:
// "Potential null pointer access: The variable dataString may be null at this location"
// at the following reference to dataString

System.out.println("Read string length " + dataString.length());
}
...

这种情况下的最佳做法是什么?如果可以避免,我不想压制警告。我更愿意告诉 Eclipse 如果 hasContent() 返回 true 那么它的参数肯定是非空的。这可能吗?如果是,怎么办?

最佳答案

你的方法的契约是,如果 hasContent 返回 true,那么它的参数保证是非空的。

Eclipse 无法在编译时表达或检查此契约,至少在不更改代码和降低其样式的情况下是这样。

Nullness Checker是一个不同的工具,可以在编译时表达和检查这个契约。它这样做不需要您更改代码。您只需添加 @EnsuresNonNullIf注释你的代码:

@EnsuresNonNullIf(expression="#1", result=true)
public static boolean hasContent(String text) { ...

Nullness Checker 与 Checker Framework 一起分发.有一个 Eclipse plugin使您能够在 Eclipse 中运行 Nullness Checker。

关于java - 我如何注释我的辅助方法,以便 Eclipse 知道它的参数在返回 true 时是非空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43611344/

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