2011-12-19 7 views
4

私は、Javaのコンストラクタ、デザインパターン、およびいくつかのパラメータを待っている場合は、パラメータのないコンストラクタでオブジェクトを初期化する良い方法について、いくつかの同僚と議論していました。未設定のコンストラクタから高度なコンストラクタを呼び出すのに適したスタイルですか?

古いものの一つは、いつものようなものを実装する彼の方法を思い付いた:

public class Foo { 

public Foo() { 
this(0,0,0); 
} 

public Foo(int a, int b, int c) { 
this.a = a; 
this.b = b; 
this.c = c; 
} 
.. 
} 

私の質問があり、良いスタイルと何が正確にその行動であるということですか?私が理解から

は次のようになります。

  • そのパラメータ設定とそのタイプの新しいオブジェクトを構築し、新しいものへの独自の基準を設定するパラメータ化コンストラクタを呼び出す、最初のオブジェクトをインスタンス化します。したがって、GCは最初に作成されたものを削除します。
+1

オブジェクトをインスタンス化するのはコンストラクタではなく、 'new'キーワードです。コンストラクタは、オブジェクトの初期化のみを行います。 – helpermethod

+0

それは常にメモリを割り当てる新しいキーワードであり、コンストラクタはオブジェクトの充電にすぎないのですか? (C++の場合も?) – Stefan

答えて

6
So the GC has then to delete the first created one. 

コンストラクタを連鎖場合のみ1つのインスタンス番号は、これまでに作成されます。

は、あなたの質問に答えるために、はい、それはあなたが foo()foo(int, int, int)これは Telescoping Constructor patternとして知られている

6

の両方を必要とすると仮定すると、良いスタイルです。効果的なJavaでは、Joshuaはalternativesを提供しています。