在感兴趣的程序中,在执行方法()期间,可能会发生一些与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大叫
UnknownHostException的无法访问的catch块。这个例外是 永远不会从try语句中抛出。
对我有什么帮助吗?我不想使用getCause()^ 3。
另外一个:这是一个很大的项目,我是新手,我宁愿不打扰外面的课程,而只是"主要"。
我的程序类似于:
public class ExportException extends Exception;
class sth{
method() throws ExpException;
}
class main{
try{
method()
} catch(UnknownHostException e){
doSth();
} catch(ExpExceptione){
doSthElse();
}
答案 0 :(得分:2)
UnknownHostException是IOException的子类型,它被检查为异常。
抛出已检查异常的方法必须在throws
声明中声明它们。
因此,当您在声明中调用一个没有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();
}
}