如何避免出现“本地变量可能尚未初始化”的Java编译错误?(是的,很认真!)

在您说这个问题已经被无数次回答之前,这是我的代码片段:

final int x;

try {

x = blah();

} catch (MyPanicException e) {

abandonEverythingAndDie();

}

System.out.println("x is " + x);

如果调用abandonEverythingAndDie()具有结束整个程序执行的作用(例如,因为它调用System.exit(int)),那么x无论何时使用它,总是将其初始化。

当前的Java语言中是否有一种方法可以通知编译器abandonEverythingAndDie()它永远不会将控制权返回给调用者,从而使编译器对变量初始化感到满意?

我 想要

  • 删除final关键字
  • x在声明时初始化,
  • 也不要将放在块println的范围内try...catch

回答:

通过向编译器提供一些额外的信息来欺骗一些用户:

final int x;

try {

x = blah();

} catch (MyPanicException e) {

abandonEverythingAndDie();

throw new AssertionError("impossible to reach this place"); // or return;

}

System.out.println("x is " + x);

您还可以使abandonEverythingAndDie()return某个东西(仅从语法上讲,它当然永远不会返回),然后调用return

abandonEverythingAndDie()

final int x;

try {

x = blah();

} catch (MyPanicException e) {

return abandonEverythingAndDie();

}

System.out.println("x is " + x);

和方法:

private static <T> T abandonEverythingAndDie() {

System.exit(1);

throw new AssertionError("impossible to reach this place");

}

甚至

throw abandonEverythingAndDie();

private static AssertionError abandonEverythingAndDie() {

System.exit(1);

throw new AssertionError("impossible to reach this place");

}

以上是 如何避免出现“本地变量可能尚未初始化”的Java编译错误?(是的,很认真!) 的全部内容, 来源链接: utcz.com/qa/421374.html

回到顶部