try-with-resource與guava Closer

基本語法
try(…) {} ,try裏面所有實現接口java.lang.AutoCloseable,包括java.io.Closeable的對象,在{}的語句塊執行完畢後都會自動的close。

例如:

try (FileWriter fileWriter = new FileWriter(outFile);
PrintWriter printWriter = new PrintWriter(fileWriter)) {
for (int i = 0; i < template.length; i++) {
        printWriter.println(template[i]);
    }
} catch (IOException e) {
LOGGER.error("寫出小說文件失敗,文件路徑:{}", filePath);
}
  1. fileWriter和printWriter都會在try的{}裏面語句執行完後自動執行clone();
  2. try結束後自動調用的close方法,這個動作會早於finally裏調用的方法。
  3. 不管是否出現異常,try()裏的實例都會被調用close方法
  4. 越晚聲明的對象,會越早被close掉。

guava給我們提供了方法。我們可以把Closeable 的對象註冊到Closer對象上,資源使用完畢後,調用closer的close方法,就可以把所有註冊了的資源安全的close掉。這個方法雖然沒有try-with-resources好用,但是比起傳統的jdk做法,要好很多了。

Closer closer = Closer.create();
try {
  InputStream in = closer.register(openInputStream());
  OutputStream out = closer.register(openOutputStream());
  // do stuff with in and out
} catch (Throwable e) { // must catch Throwable
  throw closer.rethrow(e);
} finally {
  closer.close();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章