我在下面有一个抛出Checked Exception的方法。
public class Sample{
public String getName() throws CustomException{
//Some code
//this method contacts some third party library and that can throw RunTimeExceptions
}
}
public class CustomException Extends Exception{
//Some code
}
现在在另一个类中,我需要调用方法并处理异常。
public String getResult() throws Exception{
try{
String result = sample.getName();
//some code
}catch(){
//here i need to handle exceptions
}
return result;
}
我的要求是:
sample.getName()
可以抛出CustomException,它也可以抛出RunTimeExceptions
。
在catch块中,我需要捕获异常。如果捕获的异常是RunTimeException
,那么我需要检查RunTimeException
是否是SomeOtherRunTimeException
的实例。如果是这样,我应该抛出 null 。
如果RunTimeException
不是SomeOtherRunTimeException
的实例,那么我只需要重新抛出相同的运行时异常。
如果捕获的异常是CustomException
或任何其他Checked Exception,那么我需要重新抛出相同的内容。我怎么能这样做?
答案 0 :(得分:1)
您可以这样做:
public String getResult() throws Exception {
String result = sample.getName(); // move this out of the try catch
try {
// some code
} catch (SomeOtherRunTimeException e) {
return null;
}
return result;
}
将传播所有其他已检查和未检查的异常。没有必要抓住并重新抛出。
答案 1 :(得分:1)
你可以这样做:
catch(RuntimeException r)
{
if(r instanceof SomeRunTimeException)
throw null;
else throw r;
}
catch(Exception e)
{
throw e;
}
注意:Exception
捕获所有异常。这就是为什么它放在最底层。