异常与 throws 子句不兼容的原因是什么?

2022-09-01 17:34:20

谁能告诉我异常可以有什么原因,与“throws”子句不兼容

例如:

class Sub extends Super{

    @Override
    void foo() throws Exception{

    }

}

class Super{

    void foo() throws IOException{

    }
}

异常 异常 与 Super.foo() 中的 throws 子句不兼容


答案 1

如果没有完整的代码示例,我只能猜测:您正在重写/实现子类中的方法,但是子类方法的异常规范与超类/接口方法的异常规范不兼容(即不是超类/接口方法的子集)?

如果基方法被声明为根本不抛出任何异常,或者例如 (这是你的方法的一个子类,试图扔在这里)。基类/接口的客户端期望其实例遵守基方法声明的协定,因此从该方法的实现中抛出会破坏协定(和 LSP)。java.io.IOExceptionjava.lang.ExceptionException


答案 2

要修复它,请使用运行时异常

public T findById(long id) throws RuntimeException {
    try {
          return whatEver.create();
    } catch (SystemException e) {
          throw new RuntimeException(e);
    }
}

希望这有帮助。


推荐