実装しているインターフェイスで定義されていない例外をスローする必要がある場合に従うべきベストプラクティスは何ですか?
次に例を示します。
public interface Reader
{
public abstract void read() throws IOException;
}
public class CarrotReader implements Reader
{
public void read() throws IOException {}
}
public class CupcakeReader implements Reader
{
public void read() throws IOException, CupcakeException {}
}
この場合、カップケーキを読み取るときに発生する特定の例外があるため、これに関連する例外をスローする必要があります。ただし、Readerはそのインターフェイスでこのタイプの例外を定義していないので、どうしますか?さらに、このタイプの例外はCupcakeReaderに固有であるため、Readerインターフェイスのthrows句にCupcakeExceptionを追加しても意味がありません。これを回避する1つの方法は、Readerにreadを定義させて、 Exceptionなどの親タイプをスローするようにすることですが、そうすると、例外のコンテキストが失われます。この状況であなたは何をすべきですか?ありがとう!
提起されたもう1つの興味深い状況には、制御できないインターフェースが含まれます。この場合、問題が発生したことを示す最良の方法は何ですか?
説明のために、別の例を示します。
public interface Reader
{
public abstract void read();
}
public class CupcakeReader implements Reader
{
public void read() throws CupcakeException {}
}
この場合、Readerを変更することはできませんが、 CupcakeReaderのreadメソッドで問題が発生したことを示す必要があります。