如何让java识别不可访问的代码并停止编译错误



我正在一个大型遗留项目中工作,我仍在学习java中的干净代码,并尝试应用一些我已经知道的好方法。尽管如此,我还是试着写一个方法,就像我用其他语言(比如Rust(写的那样,避免不必要的变量等等。。。但在下面的这种情况下,如果没有try-catch块外不可访问的返回null,它就无法编译它。

private Inet4Address setServerAddress() {
try {
if (somethingTrue()) {
return (Inet4Address) Inet4Address.getByName("127.0.0.1");
}
return (Inet4Address) Inet4Address.getByName(getIP4());
} catch (UnknownHostException e) {
System.out.println("Error at getting the server address from " +
"command line. (" + e.getMessage() + ")");
System.exit(1);
}
/* Unreachable */
return null;
}

我选择使用System.exit(1),因为这是应用程序的终端部分,我不希望看到一个大的java异常消息,而只希望看到对用户有意义的消息。

所以我的问题是,我如何才能让javac明白,在任何情况下,这个函数都不会返回一些东西。我真的不喜欢在我的代码中保留一个返回null,即使它永远不会运行。

在代码内部调用System.exit()会使重用此方法变得困难。

我会让这个方法抛出一个异常(你可以简单地不捕捉UnknownHostException(,并在你的工具的顶层进行try-catch(我假设"这是应用程序的终端部分"意味着这是一个命令行工具?(,可能是在你的主方法中。

这允许您将处理所有运行时错误的标准方法放在一个地方。

该异常可能是未检查的异常,或者如果您想使API更清晰,请创建一个新的已检查异常。

任何高级IDE(如Eclipse(都可以在编译后显示无法访问的代码作为警告,并显示在"问题"选项卡中。此外,Eclipse SpotBug插件静态分析工具可以发现更复杂的情况。

最新更新