0

不変のクラスがあり、両方のコンストラクターでコードを複製せずに新しいコンストラクターを追加したい。

授業がある:

public class Test {
    private final String stringParameter;

    public Test() {
        stringParameter = "firstReallyLongDefaultString";
    }

    public Test(String s) {
        stringParameter = s;
    }
}

そして、次のような「char」パラメーターを使用して新しいコンストラクターを追加したいと思います。

public Test(char s) {
    if(Character.isLetter(s)) {
        stringParameter = "firstReallyLong" + s + "DefaultString";
    } else {
        stringParameter = "firstReallyLongDefaultString";
    }
}

長い文字列のコードの繰り返しなしでそれを行うにはどうすればよいですか? else ブランチで "this()" コンストラクターを呼び出したいのですが、それはできません。

4

4 に答える 4

2
public Test(char s) {
    this(Character.isLetter(s) ? "firstReallyLong" + s + "DefaultString" : "firstReallyLongDefaultString");
}
于 2013-04-18T11:37:44.490 に答える
1

このような:

public Test(char s) {
    super();
    if(Character.isLetter(s)) {
        stringParameter = "firstReallyLong" + s + "DefaultString";
    }
}
于 2013-04-18T11:35:37.347 に答える
0

ファクトリ メソッドを使用すると、柔軟性が向上します。

public static Test create(char c) {
    final String parameter;
    if(Character.isLetter(s)) {
        parameter = "firstReallyLong" + s + "DefaultString";
    } else {
        parameter = "firstReallyLongDefaultString";
    }
    return new Test(parameter);
}

これはサブクラスでは継承できませんが、クラスを厳密に不変にしたい場合は、final にする必要があります。

于 2013-04-18T12:12:45.313 に答える