在感兴趣的程序中,在执行 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/