gpt4 book ai didi

Java - 如何处理这个 "might not be initialised"错误?

转载 作者:行者123 更新时间:2023-11-30 07:08:00 25 4
gpt4 key购买 nike

是否有一个功能可以让我检查我收到“可能未初始化”错误的变量应该未初始化的路径?最好是 Java 原生的还是内置于 Intellij 中?

编辑:设法将我的代码减少到最小的失败示例

class MyFailure{
public static void main (String[] args) throws java.lang.Exception{
String test;
boolean abort = false;
while(!abort){
if(false){
abort = true;
continue;
}

test = "stupid";
if(test.equals("stupid")) break;
}

if(!abort){
System.out.println(test);
}
}
}

Main.java:21: error: variable test might not have been initialized

假设 while 循环从服务器套接字读取数据,直到缓冲值满足特定条件,而 if(false) 实际上是检查客户端是否关闭连接,您建议我如何处理这个吗?

最佳答案

对于您问题中的代码,有一个相当简单的解决方案:在循环内使用变量,Java 也可以看到它有一个值:

public static void main (String[] args) throws java.lang.Exception{
boolean abort = false;
while (!abort){
if (false) {
abort = true;
continue;
}

String test = "stupid";
if (test.equals("stupid")) {
System.out.println(test);
break;
}
}
}

我不知道这是否适用于您的现实代码。考虑提取一个方法来处理从套接字获取的值,并从示例中的 System.out.println() 所在位置调用它。

编辑:就其值(value)而言,以下版本也可以编译。您可能仍然认为该值(println)的使用嵌套太深,降低了可读性:

public static void main (String[] args) {
if (! isFalse()) {
String test;
do {
test = "stupid";
} while (! isFalse() && ! test.equals("stupid"));
if (! isFalse()) { // connection still open, so not aborted
System.out.println(test);
}
}
}

private static boolean isFalse() {
return false;
}

正如评论中提到的,我有时会犹豫地使用声明中的无意义/虚假值来初始化有问题的变量,这样如果该值由于编程错误而被使用,我会发现。在您的示例中,我可能使用 null:

String test = null;

循环之后:

assert test != null;

所以如果它没有得到正确的值我会发现。这不是我满意的解决方案,但碰巧我找不到更好的解决方案。

关于Java - 如何处理这个 "might not be initialised"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39753299/

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