1. 程式人生 > >try-with-resource使用時遇到的問題

try-with-resource使用時遇到的問題

Java 1.7之後 增加了 try-wit-resource的語法糖,大概的用法就是在try中宣告一個或者多個的流,會在try塊程式碼執行完成後自動關閉流,不用再寫finally進行手都關閉。

try (InputStream is1 = ...;
     InputStream is2 = ...;) {
    //do something
} catch{
}

於是我就在專案中想改成這種寫法,但是在改的過程中遇到了一些問題。我的程式碼中需要對宣告過後的流再賦值,但是用這樣的寫法一直會報錯,程式碼大概是這樣的:

此時會編譯出錯:The resource is1 of a try-with-resources statement cannot be assigned;

報錯的原因是:try-with-source中宣告的變數無法被更改。但是我很奇怪這是為什麼,上網搜了沒有搜到,於是去找了一下官方文件。官方文件中有一段這樣的描述:

It is a compile-time error if final appears more than once as a modifier for each variable declared in a resource specification. A variable declared in a resource specification is implicitly declared final (§4.12.4) if it is not explicitly declared final.

意思就是,try-with-resource中宣告的變數會隱式的加上final 關鍵字,所以無法再進行賦值。但是至於為什麼這麼設計,我暫時沒找到答案。