「スロー」句と互換性がないように、例外の理由を誰かに教えてもらえますか
例えば:
class Sub extends Super{
@Override
void foo() throws Exception{
}
}
class Super{
void foo() throws IOException{
}
}
Exception ExceptionはSuper.foo()のthrows句と互換性がありません
完全なコードサンプルがなければ、私は推測しかできません:サブクラスのメソッドをオーバーライド/実装していますが、サブクラスメソッドの例外仕様は、スーパークラス/インターフェイスメソッドのそれと互換性がありません(つまり、そのサブセットではありません)?
これは、ベースメソッドが例外をまったくスローしないように宣言されている場合、またはJava.io.IOException
(メソッドがここでスローしようとしているJava.lang.Exception
のサブクラスです)。基本クラス/インターフェイスのクライアントは、そのインスタンスが基本メソッドによって宣言されたコントラクトに準拠することを期待しているため、そのメソッドの実装からException
をスローすると、コントラクトが破壊されます(そして [〜#〜] lsp [〜#〜] )。
修正するにはRuntimeExceptionを使用します
public T findById(long id) throws RuntimeException {
try {
return whatEver.create();
} catch (SystemException e) {
throw new RuntimeException(e);
}
}
お役に立てれば。