インターフェイスがあり、そのメソッドがどのように実装されるのかわからない場合(つまり、他のユーザーが拡張するライブラリ)、そのメソッドの実装が例外を起こしやすいかどうかをどのように知ることができますか?あなたは、実装を知らないので、すべてのインタフェースメソッドに "例外をスロー"すると宣言するだけですか?インターフェイスメソッドで常に「例外をスローする」と宣言しますか?
たとえば、私はhttpクライアントを作っています。このライブラリは、httpリクエスト文字列を表しRequest
インターフェースを持っています
public interface Request
{
String asString(); // no "throws" here
}
public final class AssembledRequest implements Request
{
// ...
public AssembledRequest(Method method, Url url, Headers headers, Body body) {
// ...
}
public String asString() {
// ...
}
}
また、このRequest
インタフェースを使用していますResponse
クラスを、持っています。 私自身の実装(AssembledRequest
)は例外をスローしません。文字列の束をアセンブルするだけで、ほとんどの実装でおそらく何もスローされません。
しかし、ユーザがのファイルを読み込む方法でRequest
を実装したい場合はどうなりますか?その後、我々はIOExcepton
を扱っており、ユーザーがそのような例外を処理することは非常に難しいでしょう。 No throws...
が宣言されているので、メソッド内で処理する必要があります。ノーノーです。キャッチして再スローする必要があるため、アプリケーションの上部にバブルアップして処理されます。
Request
のインターフェイスにがasString
と宣言されていると、はるかに簡単になります。これは、ライブラリの場合、すべてのインタフェースのメソッドがthrows Exception
であると結論づけています。私は正しい?
メソッドが例外をスローする可能性があるかどうかを確認する必要があります。例外をスローしたくない場合は、例外が発生しやすい場合は、それを実装するメソッドで 'try-catch'する必要があります。 –
いつか、たぶん、多分誰かが必要とするかもしれないので、インターフェースメソッドに '例外をスローする 'を追加するのは、最悪の種類のYAGNI(それは必要ないでしょう)です。あなたはすべての未来の世代に永遠に払う。良い計画ではありません。 –
@BobDalgleish 'asString'がファイルから読み込んだとき、どうすれば問題を解決できますか? –