在Java中嵌套try/catch语句是否可以接受?

Ste*_*eve 5 java android exception-handling try-catch

我试图从传入的值(使用Bundle)在Android中创建一个IP地址,如果失败,我将使用硬编码的默认IP地址创建它.如果失败,那么我退出应用程序.

我想知道的是,如果可以像我在这里做的那样嵌套try/catch,或者是否有更好的方法.

try {
    // serverSettings is the Bundle name that was passed in.
    ipAddress = InetAddress.getByName(serverSettings.getString("serverIp"));
} catch (UnknownHostException e) {
    Log.e("ERROR:", "IOException: Failed to create IP, trying default");
    try {
        // DEFAULT_IP is the hard-coded default fall-back address
        ipAddress = InetAddress.getByName(DEFAULT_IP);
    } catch (UnknownHostException e1) {
        Log.e("ERROR:", "IOException: Total fail, exiting");
        e1.printStackTrace();
        finish();
    }
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*ung 10

这是合法的Java.它看起来很笨我,我可能会采用不同的方式,但它有效并且有效.

这是我如何做到的:

public InetAddress getServerAddress() {
    for (String address : new String[] {serverSettings.getString("serverIp"), DEFAULT_IP}) {
        try {
            return InetAddress.getByName(address);
        } catch (UnknownHostException e) {
            Log.e("ERROR:", "Cannot resolve " + address);
        }
    }
    Log.e("ERROR:", "Total fail, exiting");
    finish();
    return null;    // not reached
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢克里斯,这看起来是一个很好的整洁的方法,如果我进入更多的嵌套层,这可能会是一个更好的方法。干杯,史蒂夫 (2认同)