【发布时间】:2019-09-06 05:45:23
【问题描述】:
确切的错误是:“抛出列表中已经有一个更一般的异常,'java.lang.exception'”
我有这样的方法:
public String myMethod() throws FileNotFoundException, IOException, Exception {
try{
// DO STUFF
}catch(FileNotFoundException e){
// DO STUFF
throw new FileNotFoundException("custom message", e);
}catch(IOException e){
// DO STUFF
throw new IOException("custom message", e);
}catch(Exception e){
throw new Exception("custom message", e);
}
return myString;
}
Intellij 告诉我前两个是多余的,因为我最后有更通用的Exception,是这样吗?
即使我明确地抛出IOException,该方法是否会抛出Exception?
还是无论如何都会抛出通用异常,所以我什至不需要Exception?
【问题讨论】:
-
你的问题毫无意义。这是先到先得的原则。一次只能抛出一个异常。不,如果您有 IOException,则不会抛出 new Exception("", e),如果您没有专门捕获 IOException 并且您的代码会抛出一个
-
“它们并不总是可靠的”??你是什么意思?它们非常可靠,如果 IDE 不可靠,您真的认为 IDE 会发展成为专业环境中最常用的工具之一(尤其是如果您必须付费才能获得所有功能)?一个更好的问题是:如果您不相信 IntelliJ 的可靠性,为什么还要使用它?
-
@Stultuske 是的,我知道。但是,据我所知,linter 说,因为我在
throws部分中有Exception,并且比IOException更通用,所以我应该从顶部的throws中删除IOException。但我不想检查堆栈中更靠前的是哪种类型的异常,我宁愿从这里抛出正确的异常.. -
@Stultuske 不可靠是错误的,这是一个糟糕的短语,我会删除它。
-
所以问题是,当我不想时,intellij 会提示我抛出更一般的异常。声明一个方法只抛出最一般的情况并不总是最好的,当内部实际抛出的异常更具体时。如果你这样做,它对调用者是不透明的。在这种情况下,这是我对 linter 的问题。