java - 捕获导致异常的 UnknownHostException

标签 java exception

在感兴趣的程序中,在执行 method() 期间可能会发生一些与 HTTP 相关的异常。由于某些原因,该方法被设置为能够抛出 ExpException。我的兴趣仅在于特定类型的异常,即 UnknownHostException,可以通过使用访问

if (e.getCause().getCause().getCause() instanceof UnknownHostException)

我希望你同意这是非常令人讨厌的方式。因此,这工作得很好:

public class ExportException extends Exception;

class sth{
  method() throws ExpException;
}

class main{
  try{
    method()
  } catch(ExpExceptione e){
    if (e.getCause().getCause().getCause() instanceof UnknownHostException){
        doSthElse();
    }
  }

但是,我希望按照如下所述进行操作。不幸的是,Eclipse 喊了

Unreachable catch block for UnknownHostException. This exception is never thrown from the try statement.

有什么可以帮助我的吗?我不想使用 getCause()^3。

补充:这是一个很大的项目,我是新人,不想打扰外部类(class),而只是“主要”。

我的程序是这样的:

public class ExportException extends Exception;

class sth{
  method() throws ExpException;
}

class main{
  try{
    method()
  } catch(UnknownHostException e){
    doSth();
  } catch(ExpExceptione){
    doSthElse();
  }

最佳答案

UnknownHostException 是 IOException 的子类型,它是检查异常。

抛出检查异常的方法必须throws声明中声明它们。

因此,当您调用声明中没有抛出 UnknownHostException 的方法时,您将永远不会捕获此异常 - 代码无法访问并且编译器是正确的。

Here您可以看到如何很好地检查异常原因是否包含任何特定异常。

static boolean hasCause(Throwable e, Class<? extends Throwable> cl) {
    return cl.isInstance(e) || e.getCause() != null && hasCause(e.getCause(), cl);
}

catch(ExpException e) {
    if (hasCause(e, UnknownHostException.class)) {
       doSmth();
    } else {
       doSmthElse();
    }
}

关于java - 捕获导致异常的 UnknownHostException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35062367/

相关文章:

java - 使用eclipse在运行时抛出异常

ruby - ruby 中的 spaceship <=> 运算符如何抛出异常?

c++ - 解释器模式中的错误处理

java - 如何使用 hasNextInt() 捕获异常?我需要 Int 但如果输入是字符,那就不好了

java - 不透明内容到底是什么意思?

java - 包含 2 个下划线和 3 个段的文件名的正则表达式

java - 如何从 Eclipse 导出 Java OpenGL (JOGL)?

java - @Transactional 在 Spring Boot 中不回滚

java - JUnit4 - 测试方法是否不执行任何操作

java - 在 Java 中进行多个异步调用时如何忽略失败的 CompletableFuture 调用?