1

5 つの内部文字列変数を持つオブジェクトがありますが、そのうちの 3 つはオプションです。可能な組み合わせごとにコンストラクターを作成するか、一般的なコンストラクターを呼び出して空の文字列を渡すことができます。後者のケースは私にとって興味深いものです。コンストラクターを呼び出すときに次のようなことができれば:

String a = "Mandatory";
...
String e = "" + getVariableE(); //getVariableX() could return null, 
                                //then it would be "".
                                //This is a "long" fetch statement.

new objectA(a, b, c, d, e); 

別のオプション:

String d = "";
String e = "";
if(getVariableD!=null)  //Remember pretty long fetch statement (ugly looking)
     d = getVariableD();
if(getVariableE!=null)
    e = getVariableE();

new objectA(a, b, c, d, e);

複数のifステートメントを使用せずに複数のコンストラクターを使用する方法はありません。

new objectA(a, b, c);
new objectA(a, b, c, d)

コンストラクターはここでは要因ではないかもしれませんが、行が "" または何かに設定される方法だけです。それにもかかわらず、何かを見逃した場合に備えて残しました。

これは単純な objectA クラスです

public class objectA {
String a; //Needed
String b; //Needed
String c; //Optional
String d; //Optional
String e; //Optional
/*
 * Possible constructor
*/
    void object(String a, String b, String c, String d, String e) {
    this.a = a;
    ...
    this.e = e;
    }

注: getVariableX() は XML ファイルから属性を取得するため、強制的に文字列を含めることができますが、これは適切ではないと思います。XML ファイルに柔軟性を持たせてください。

4

3 に答える 3

1
if(getVariableD!=null) {
    d = getVariableD();
}

三項演算子に変換できます。

d = getVariableD != null ? getVariableD() : "";

注: 簡潔さよりもコードの読みやすさを優先する必要があります。

Elvis 演算子は、Java 7 用に提案されたが採用されなかったシンタックス シュガーでした。

于 2013-02-14T08:34:29.260 に答える
1

getVariableD()String を返す場合は、 GuavaStrings.nullToEmpty()のメソッドを使用して、 getVariableD() を 2 回入力 (および評価) する必要がないようにすることもできます。

もちろん、任意のオブジェクトに対して同様のユーティリティ メソッドを作成できます。

/** Returns {@code obj.toString()}, or {@code ""} if {@code obj} is {@code null}. */
static String safeToString(@Nullable Object obj) {
  return obj == null ? "" : obj.toString();
}

そして、次のようにします。

String d = safeToString(getVariableD());
于 2013-02-14T10:39:31.883 に答える