2016-06-28 7 views
0
public final Class MoneyI implements Money { 

    public MoneyI(int a, Currency b) { 
    } 

    public MoneyI(int a, String b) { 
     b= b.equals("A")?"B":b; 
     this(a, Currency.getInstance(b)); 
    } 
} 

明らかに、2番目のコンストラクタは、コンストラクタ呼び出しの最初の文であることを示すエラーをスローします。プログラミングトリック:コンストラクタコールの前に変数を変更できない

コールする前に文字列を変更するにはどうすればよいですか? new moneyI(a, Currency.getInstance(b))は、MoneyIの新しいインスタンスを作成し、同じ呼び出しで変更しないため、実行できません。

+0

コードでエラーを修正してください。 – ChiefTwoPencils

+0

この文を 'Currency.getInstance()'のパラメータの中に入れることができます。割り当てとすべて。 – 4castle

+2

[ファクトリメソッド](https://en.m.wikipedia.org/wiki/Factory_method_pattern) –

答えて

1

あなたは(それを行う、あなたはまだ、パラメータを変更する必要がある場合には、当時と)単にコンストラクタ呼び出しの前に文字列自体を変更しないが、コール自体で「正しい」値を送信することができます

public final Class MoneyI implements Money { 

    public MoneyI(int a, Currency b) { 
    } 

    public MoneyI(int a, String b) { 
     this(a, Currency.getInstance(b.equals("A") ? "B" : b)); 
     b = b.equals("A") ? "B" : b; 
    } 

} 
+0

これを試しました。getinstanceで何も変更せずに送信文字列を返しました。 – user3274263

0
  • 静的メソッドを作成します。
  • 変数とコールコンストラクタを設定します。以下は

私はこの答えについてわからないコード

public final class MoneyI { 
    public MoneyI(int a, Currency b) { 

    } 

    public static MoneyI moneyImethod(int a, String b) { 
     b = b.equals("A") ? "B" : b; 
     MoneyI moneyI = new MoneyI(a, Currency.getInstance(b)); 
     return moneyI; 
    } 
} 

をご確認ください。これが間違っている場合は、修正するのを手伝ってください。

+0

これはシングルトンパターンとは関係ありません。これはシングルトンのためには不必要ではない静的ファクトリメソッド*です。 –

+0

シングルトンパターンの実装の種類は?私はわかりません。 OK。私は編集しました。ありがとう – CrazyJavaLearner

0

あなたはここでファクトリメソッドを使用する必要はありません:あなたは、単にそのパラメータを変更するには、静的メソッドを定義することができます:あなたはどんなロジックを実装

this(a, someMethod(b)); 

someMethodbを修正します。

静的なファクトリメソッドと比較した場合の利点は、継承のために文字列コンストラクタを表示できることです。つまり、そのctorを呼び出すサブクラスを定義できます。

関連する問題