2011-06-03 12 views
4

下記のクラスで指定されているように変更することは可能ですか?メンバを既定の呼び出し元に対して初期化しますか?nullJavaでは、コンストラクタ呼び出しに基づいて最終データメンバを初期化できますか?

メンバーは、永続性要件としてプライベート最終である必要があります。あなただけ持つことができないのはなぜ

// initial version of the class 
public class A { 
    A() { 
     // do some work here 
    } 
} 

// the following modification required adding additional constructor to the class with **member** data member. 
public class A { 
    private final String member; 

    A(String member) { 
     this(); 
     this.member = member; 
    } 

    A() { 
     // initilize member to null if a client called this constructor 
     // do some work here 
    } 
} 
+0

はい、宣言時に初期化されていない最終変数は、コンストラクターで1回のみ初期化できます。同じコンストラクタまたはsetterメソッドで再度実行しようとすると、コンパイラエラーが発生します。 – Arkantos

答えて

6

public class A { 
    private final String member; 

    A(String member) { 
     this.member = member; 
    } 

    A() { 
     this(null); 
    } 
} 

これは、コンストラクタチェーンのための通常のパターンです。 より具体的でないバージョンをより具体的なバージョンと呼び、必要に応じてデフォルトのパラメータを提供してください。

+0

ありがとう!なぜ私はそれについて考えなかったのですか? :))私は実際にコンストラクタチェインを試みたが、他の方法で周り:) – Leonid

5

はい!

public class A { 
    private final String member; 

    A(String member) { 
     this.member = member; 
     // do some work here instead 
    } 

    A() { 
     this(null); 
    } 
} 
0

はい、これは通常Enumsで使用されます。

関連する問題