簡體   English   中英

Java 7 Try-With-Resources(AutoCloseable)實現

[英]Java 7 Try-With-Resources (AutoCloseable) Implementation

我的問題更多的是為什么類型而不是如何

我知道在Java 7中有以下工作:

    try (
            FileInputStream in = new FileInputStream(source);
            FileOutputStream out = new FileOutputStream(target);
    ) {
        .....................
      } catch (......) {
       ...............
      }

以下是語法錯誤:

    FileInputStream in;
    FileOutputStream out;
    try (
            in = new FileInputStream(source);
            out = new FileOutputStream(target);
    ) {
        .....................
      } catch (......) {
       ...............
      }

我很好奇,為什么它如此重要, Closable / Autoclosable引用是本地try塊? 如果我們不擁有它而不是關閉它是危險的,這只是邏輯嗎?

我沒有這個語言設計決策的參考,但我認為問題是允許非局部變量自動閉合將是危險的 - 也就是說,它將允許許多不安全的編碼樣式。 Java語言規范

如果未明確聲明為final,則在ResourceSpecification中聲明的資源將被隱式聲明為final(第4.12.4節)。

如果資源不是final ,那么在try塊中可能會重新分配它們,從而導致資源泄漏。 由於它們(隱式或顯式)是final ,因此編譯器必須做很多額外的工作以確保在輸入try資源規范時肯定未分配變量。 它可能還需要更改final的編譯器語義,因為在try塊退出后變量確實不應該有一個有效值; 當然不是try資源規范中賦給它們的值。 最干凈(也許唯一)要做的是在try塊退出時使變量超出范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM