的靜態最終場爲實例字段和同名的局部變量,我們可以有資格進入該領域的前綴this.
區分在靜態上下文中通過使用類名稱來限制訪問同樣的事情:分配到同一個名字
import java.util.*;
class Test {
public static final Map<String,Object> map;
static {
Map<String,Object> map = new HashMap<>();
// ...
// assume I fill the map with useful data here
// ...
// now I want to freeze it and assign it to the field
Test.map = Collections.unmodifiableMap(map);
}
}
編譯器不需要這個代碼。我有幾個像這樣的變量,並且對於所有這些變量都會大喊:「無法爲最終變量賦值」。如果我不是分配給它,它抱怨「變量未初始化」,而不是。如果我在開始時分配給靜態字段並嘗試使地圖之後不可修改,則它會抱怨「變量可能已被分配」。這對任何事都不滿意。
這是語言中的缺陷還是編譯器中的錯誤?按照它的說法,壓縮編譯器的最佳方法是什麼?
使用兩個不同的名稱。沒有理由認爲靜態塊內的'map'必須與靜態'map'域具有相同的名稱。 – ajb 2014-11-06 02:53:20
重命名確實有用,但它很醜陋,因爲我在初始化塊中多次使用這些變量,而且它們對於它們的專有名稱會更有意義。我想知道是否有更好的東西。 – Boann 2014-11-06 02:56:25