2012-03-21 7 views
0

コンストラクタ内またはフィールドが宣言されているポイントでJavaフィールドを初期化する方がよいですか?たとえば:フィールドをインラインまたはコンストラクタ内で初期化する

public class Foo { 
    private final List<String> l; 

    public Foo() { 
    this.l = new LinkedList<String>(); 
    } 
} 

...または

public class Foo { 
    private final List<String> l = new LinkedList<String>(); 
} 

私は通常、それが明確に見えたとして、元好まれてきました。しかしながら、後者は明らかによりコンパクトなコードをもたらす。

+0

[ベストプラクティス:コンストラクタまたは宣言でクラスフィールドを初期化するかどうかの可能な複製?](http://stackoverflow.com/questions/24551/best-practice-initialize-class-fields-in-constructor-or-at) -declaration) –

+0

前者はあなたのオブジェクトが作成されたときにのみリストが初期化されるため、私にはうってつけです。 – sgowd

+0

だから、後者の場合もそうです。 – aioobe

答えて

4

親指の私のルールは次のとおりです。

  • 場合は、宣言の時点でそれを入れて...それでき(すなわち、それは、インスタンスのコンストラクタの引数に依存していない場合)
  • ...それは計算の形式を必要としません
  • ...どのコンストラクタが使用されても値は同じです。

それ以外の場合は、コンストラクタに配置します。

通常、私は公式のJavaコーディング規約に厳密に従います。この特定のケースでは、条約はそれについて何も言及していないので、各プログラマーが決定する必要があります。これまであなたが選んだのは、おそらくあなたの選択と一貫していたいということです。

1

複数のコンストラクタがある場合、初期化(may)がdelcarationの時点で初期化されなかった場合は、初期化(may)を繰り返す必要があります。

関連する問題