檢查異常是 Java 中的一個強大工具,因為它們迫使程式設計師處理異常情況,從而提高程式碼可靠性。然而,過度使用可能會導致 API 難以使用。為了證明檢查異常是合理的,情況必須是真正的異常並且程式設計師能夠採取有用的操作。否則,未經檢查的異常可能更合適。
Java 8 為檢查異常的使用帶來了額外的挑戰,因為拋出異常的方法不能直接在流中使用,需要在程式碼中進行額外的處理。為了避免這種複雜性,可以考慮替代方案,例如傳回一個可選物件而不是拋出可驗證的異常,或者將方法分為兩個,一個檢查錯誤的可能性,另一個執行操作。
應謹慎使用受檢異常:如果無法恢復,則使用非受檢異常。當恢復可行時,考慮可選返回。如果這沒有提供足夠的信息,那麼檢查異常可能是合理的。
加:
這裡有一些例子來說明檢查異常和替代方案(例如Optional)的正確使用以及檢查方法的使用。
謹慎使用檢查異常
假設我們有一個從文件載入資料的方法。如果沒有找到該文件,我們想要拋出一個異常來通知呼叫者有問題。在這種情況下,檢查異常是合適的,因為開發人員可以採取措施解決問題(例如提供正確的存檔路徑)。
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.") );
在這個例子中,呼叫者不需要處理異常,Optional可以讓其更順利地處理缺少的內容。
方法分為兩種:驗證與操作
在某些情況下,我們可以將方法分為兩種:一種檢查條件,另一種執行操作。這允許呼叫者在呼叫 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,一種未經檢查的異常,如果呼叫者嘗試載入檔案而不先檢查它是否可用。
概括
Checked Exception:用於呼叫者可以直接修復的條件,例如檔案的 FileNotFoundException。
可選:當缺少值不應中斷程序流程時使用。
方法劃分:在可以預測和避免錯誤的情況下,將檢查和執行方法分開,使API更加靈活和簡單易用。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3