2011-10-18 42 views
1

我有靜態final字段的類,我想從我的上下文初始化它們。我可以這樣做嗎?或者我必須尋找另一種解決方案?如何在Spring中從上下文設置靜態最終參數?

+0

他們在聲明最後,我懷疑這將工作;) – HefferWolf

+0

最簡單的解決方法是刪除了'靜態final'修飾符 –

+0

的問題將是,你必須初始化(即集)'final'變量的值。如果沒有使用反射「破壞」變量的「最終性」,您將無法做到這一點。 – DwB

回答

3

因爲final變量是有效的常量,必須在初始化過程中準確定義一次,所以不能在Spring(或通常用Java)中執行此操作。但看看:Java 5 - "final" is not final anymore

0

這是final,那是怎麼回事?

您可以通過使用非反射Java提供一個常規設置器來分配給一個 - final靜態變量。您可以使用Tomasz指出的反射來設置最終字段。

+0

'final'是一次寫入變量。用'private final String'創建一個類,不要初始化它,然後根據構造函數參數值在構造函數中設置值。 – DwB

+0

@DwB如果你可以做ctor注射,那很好;這並不總是可能的。 –

0

根據「matt b」的評論,您可以從變量聲明中刪除最後一個,並在setter中實現「設置一次」功能。

例如:

private static String blammy = null; 

public String getBlammy() { return blammy; } 

public void setBlammy(String newValue) 
{ 
    if (StringUtils.isNotBlank(newValue)) // only set to a non blank value. 
    { 
    if (blammy == null) // set once functionality 
    { 
     blammy = newValue; 
    } 
    } 
} 
相關問題