私はC++の開発者です。私はJavaでチェックされたチェックされていない例外でかなり新しいです。 C++の例外仕様はあまり良くないので、誰もそれを使用していません。私はチェック例外が好きで、私は疑問を持っている、のは、このインタフェースを持ってみましょう:チェックされた例外の仕様と戦略のパターン
public interface Warehouse {
MyStuff fetch(int id);
}
倉庫が異なる方法で実装することができます。ファイル、データベースまたはメモリで(テスト用モックオブジェクト)。
ファイルを使用して実装したい場合は、このメソッドでファイルを開こうとしません。それ以外の場合は、署名が変更され、クラスがインタフェースを実装しなくなります。また、別のチェックされた例外を持つ別のクラスがある場合、他の既存の実装はすべて影響を受けます。
私は2つのソリューションを見ることができます:
がチェック例外をキャッチし、別のカスタムランタイム例外をスローします。私はこれが良い解決策ではないと考えています。なぜなら、ユーザーは実行時の例外をキャッチして、標準とチェックされた方法でファイルが見つからないということです。
実装クラスのコンストラクタでジョブ全体を実行し、フェッチ機能をスローすることはできません。私はこの方法が好きです、オブジェクトは存在し、有効であるか存在しません。このアプローチの唯一の欠点は、遅延評価を実装できないことです。誰もオブジェクトを使用しなくても、コンストラクタ内のファイルを読み込んで解析する必要があります。これは効率的ではありません。
私に何か不足していますか?この問題を回避するより良い方法はありますか?
Uhohを、チェックされていない例外と未チェックの例外。それは多くの議論を生み出すでしょう。これは、Java開発者の間ではかなり宗教的な話題です。 – tobiasbayer