2011-10-18 6 views
1

私は静的な最終フィールドを持つクラスがあり、私は自分のコンテキストからそれらを初期化したい。これを行うことができますか?それとも別の解決策を探す必要がありますか?Springのコンテキストから静的な最終パラメータを設定する方法は?

+0

は、彼らが私はこれが動作しないだろう、最終的に宣言されている;) – HefferWolf

+0

最も簡単な解決策は、問題は、あなたが初期化しなければならないということになります '静的final'修飾子 –

+0

を削除することです(つまり、セット) 'final'変数の値を返します。リフレクションを使用して変数の「最終性」を「破る」ことなくこれを行うことはできません。 – DwB

答えて

3

final変数が効果的に初期化時に一度だけ定義する必要が定数であるので、あなたは、春(または一般にJavaを使用)でこれを行うことはできません。しかし、見る:Java 5 - "final" is not final anymore

0

それはその仕事how'd、finalですか?

あなたはに割り当てることができます - 非反射のJavaを使用して、通常のセッターを提供することにより、final静的変数。 Tomaszが述べたように、最終的なフィールドを設定するためにリフレクションを使用することができます。 「マットB」でのコメントに基づいて

+0

'final'は追記型変数です。 'private final String'を使ってクラスを作成し、初期化せずに、コンストラクタのパラメータ値に基づいてコンストラクタの値を設定します。 – DwB

+0

@DwBあなたはctor注入ができればいいです。これは必ずしも可能ではありません。 –

0

あなたは変数宣言から最終的に削除し、セッターで機能を「一度設定」を実装することができます。例えば

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; 
    } 
    } 
} 
関連する問題