チェック例外は、プログラマに例外条件の処理を強制し、コードの信頼性を高めるため、Java の強力なツールです。ただし、過度に使用すると API が使いにくくなる可能性があります。チェック例外が正当化されるには、その状況が真に例外的であり、プログラマ側で有用なアクションを実行できる必要があります。それ以外の場合は、チェックされていない例外の方が適切な場合があります。
Java 8 では、チェック例外をスローするメソッドをストリーム内で直接使用できず、コード内で追加の処理が必要になるため、チェック例外の使用にさらなる課題が生じました。この複雑さを回避するには、検証可能な例外をスローする代わりに Optional オブジェクトを返すか、メソッドを 2 つに分割し、1 つはエラーの可能性をチェックし、もう 1 つは操作を実行するなどの代替案を検討できます。
チェック例外は慎重に使用する必要があります。回復が不可能な場合は、非チェック例外を使用してください。リカバリが可能な場合は、復帰のオプションを検討してください。これで十分な情報が得られない場合は、チェック例外が正当化される可能性があります。
プラス:
ここでは、チェック例外の適切な使用法と、オプションなどの代替手段やチェック メソッドの使用法を示すいくつかの例を示します。
チェック例外を控えめに使用する
ファイルからデータをロードするメソッドがあるとします。ファイルが見つからない場合は、例外をスローして呼び出し元に問題を通知します。この場合、開発者は問題を解決するためのアクション (正しいアーカイブ パスを提供するなど) を実行できるため、チェック済み例外が適切です。
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 Optional<String> loadFile(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(); Optional<String> content = 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 { 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"; } }
発信者コード内:
import java.util.Optional; public class FileLoader { public Optional<String> loadFile(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"); } }
ここでは、呼び出し元が最初にファイルが利用可能かどうかを確認せずにファイルをロードしようとした場合に、未チェックの例外である IllegalStateException を使用します。
概要
チェック済み例外: ファイルの FileNotFoundException など、呼び出し元が直接修正できる条件に使用します。
オプション: 値の欠如によってプログラム フローが中断されるべきでない場合に使用します。
メソッド分割: エラーが予測および回避できる場合は、チェック メソッドと実行メソッドを分離し、API をより柔軟で使いやすくします。
以上が項目 チェック例外の不要な使用を避けるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。