Java 捕获引起异常的未知后异常
在感兴趣的程序中,在方法()的执行过程中,可能会发生一些与HTTP相关的异常。由于某种原因,该方法被设置为能够抛出ExpException。我只对特定类型的异常感兴趣,即UnknownHostException,可以使用Java 捕获引起异常的未知后异常,java,exception,Java,Exception,在感兴趣的程序中,在方法()的执行过程中,可能会发生一些与HTTP相关的异常。由于某种原因,该方法被设置为能够抛出ExpException。我只对特定类型的异常感兴趣,即UnknownHostException,可以使用 if (e.getCause().getCause().getCause() instanceof UnknownHostException) 我希望你同意这是一种非常恶劣的方式。因此,这很好: public class ExportException extends Exc
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的不可访问捕获块。这个例外是
从不从try语句中抛出
有什么可以帮我的吗?我不想使用getCause()^3
另外:这是一个大项目,我是新来的新手,我不想在课外捣乱,而只是“主要的”
我的程序类似于:
public class ExportException extends Exception;
class sth{
method() throws ExpException;
}
class main{
try{
method()
} catch(UnknownHostException e){
doSth();
} catch(ExpExceptione){
doSthElse();
}
UnknownHostException是IOException的一个子类型,它被选中为异常 抛出选中异常的方法必须在抛出声明中声明它们 因此,当您调用一个在声明中没有
抛出UnknownHostException
的方法时,您将永远不会捕获此异常-代码是不可访问的,编译器是正确的
您可以看到如何很好地检查异常原因是否包含任何特定的异常
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();
}
}
static boolean hasCause(Throwable e,classe此异常未被抛出。从错误消息中可以明显看出这一点。如果异常是您捕获的异常的原因,那么它不会在您试图捕获它的位置被抛出。或者您更改捕获它的代码部分,使其成为另一个异常的原因,或者您需要获取原因就像你一直在做的那样。