チェック例外は、プログラマに例外条件の処理を強制し、コードの信頼性を高めるため、Java の強力なツールです。ただし、過度に使用すると API が使いにくくなる可能性があります。チェック例外が正当化されるには、その状況が真に例外的であり、プログラマが有益なアクションを実行できる必要があります。それ以外の場合は、チェックされていない例外の方が適切な場合があります。
Java 8 では、チェック例外をスローするメソッドをストリーム内で直接使用できず、コード内で追加の処理が必要になるため、チェック例外の使用にさらなる課題が生じました。この複雑さを回避するには、検証可能な例外をスローする代わりに Optional オブジェクトを返すか、メソッドを 2 つに分割して、エラーの可能性をチェックするメソッドと操作を実行するメソッドを分割するなどの代替案を検討できます。
チェック例外は慎重に使用する必要があります。回復が不可能な場合は、チェックなし例外を使用してください。リカバリが可能な場合は、復帰のオプションを検討してください。これで十分な情報が得られない場合は、チェック例外が正当化される可能性があります。
プラス:
ここでは、チェック例外の適切な使用法と、オプションなどの代替手段やチェック メソッドの使用法を示すいくつかの例を示します。
チェック例外の使用は控えめに
ファイルからデータをロードするメソッドがあるとします。ファイルが見つからない場合は、例外をスローして呼び出し元に問題を通知します。この場合、開発者は問題を解決するためのアクション (正しいアーカイブ パスを提供するなど) を実行できるため、チェック済み例外が適切です。
public class FileLoader { public String loadFile(String filePath) throws FileNotFoundException { File file = new File(filePath); if (!file.exists()) { throw new FileNotFoundException("Arquivo não encontrado: " filePath); } // Código para carregar o arquivo return "Conteúdo do arquivo"; } }
ここでは、呼び出し元はファイルへの正しいパスを提供することで問題を解決できるため、FileNotFoundException 例外を処理する必要があります。
チェック例外の代わりにオプションを使用する
ファイルの欠落が通常の実行を中断すべきでない状況である場合は、Optional を使用して、例外をスローせずに結果が欠落している可能性があることを示すことができます。これにより、値の欠如が許容される場合に API がより流動的になります。
import java.util.Optional; public class FileLoader { public OptionalloadFile(String filePath) { File file = new File(filePath); if (!file.exists()) { return Optional.empty(); } // Código para carregar o arquivo return Optional.of("Conteúdo do arquivo"); } }
発信者コード内:
FileLoader loader = new FileLoader(); Optionalcontent = loader.loadFile("caminho/para/arquivo.txt"); content.ifPresentOrElse( System.out::println, () -> System.out.println("Arquivo não encontrado.") );
この例では、呼び出し元は例外を処理する必要がなく、オプションを使用すると欠落しているコンテンツをよりスムーズに処理できます。
メソッドを 2 つに分ける: 検証とアクション
場合によっては、メソッドを 2 つに分けることができます。1 つは条件をチェックするメソッド、もう 1 つはアクションを実行するメソッドです。これにより、呼び出し元は main メソッドを呼び出す前に例外条件を処理できるようになり、API がより柔軟になります。
public class FileLoader { // Verifica se o arquivo está disponível public boolean isFileAvailable(String filePath) { File file = new File(filePath); return file.exists(); } // Carrega o conteúdo do arquivo public String loadFile(String filePath) { if (!isFileAvailable(filePath)) { throw new IllegalStateException("Arquivo não encontrado: " filePath); } // Código para carregar o arquivo return "Conteúdo do arquivo"; } }
発信者コード内:
FileLoader loader = new FileLoader(); String filePath = "caminho/para/arquivo.txt"; if (loader.isFileAvailable(filePath)) { String content = loader.loadFile(filePath); System.out.println(content); } else { System.out.println("Arquivo não encontrado."); }
ここでは、呼び出し元が最初にファイルが利用可能かどうかを確認せずにファイルをロードしようとした場合に、未チェックの例外である IllegalStateException を使用します。
まとめ
チェック例外: files.
の FileNotFoundException など、呼び出し元が直接修正できる条件に使用します。
オプション: 値の欠如によってプログラム フローが中断されるべきではない場合に使用します。
メソッド部門: エラーが予測および回避できる場合はチェック メソッドと実行メソッドを分離し、API をより柔軟で使いやすくします。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3