6

私は次のコードを持っていますが、一連のif/elseステートメントの代わりにswitchブロックを使用する方法があるかどうか疑問に思っています。Java1.7の時点でJavaがスイッチブロックの文字列をサポートしていることは知っていますが、Java1.6で作業を続けています。

} else if (typeName.equals("Boolean")) {

            return new SwitchInputType<Boolean>(new Boolean((String) memberValue));

        } else if (typeName.equals("Double")) {

            return new SwitchInputType<Double>(new Double((String) memberValue));

        } else if (typeName.equals("Int32"))
4

4 に答える 4

8

あなたはあなたのためにそれをすることさえできenumます:

public static void main(String[] args) throws InterruptedException {
    String typeName = "Boolean";
    String memberValue = "memberValue";
    SwitchInputType type = Type.valueOf(typeName).makeType(memberValue);
}

enum Type {
    Boolean {
        SwitchInputType makeType(String memberValue) {
            return new SwitchInputType<Boolean>(new Boolean(memberValue));
        }
    },
    Double {
        SwitchInputType makeType(String memberValue) {
            return new SwitchInputType<Double>(new Double(memberValue));
        }
    }, 
    Int32 {
        SwitchInputType makeType(String memberValue) {
            return new SwitchInputType<Integer>(new Integer(memberValue));
        }
    };

    // All must do this.
    abstract SwitchInputType makeType(String memberValue);
}

static class SwitchInputType<T> {
    public SwitchInputType(Object o) {
    }
}
于 2013-03-20T20:27:17.993 に答える
6

文字列はすべて有効な識別子であるため、これらの文字列を項目ラベルとして使用して列挙を作成し、Enum.valueOf(Class, String) (または列挙クラスで作成される同様のvalueOf(String)メソッド) を使用して、のメンバーに変換できます。列挙型、そしてそれに基づいて切り替える...

例:

enum TypeName { Boolean, Double, Int32 }

switch (TypeName.valueOf(typeName)) {
   case Boolean: // ...
   case Double: // ...
   case Int32: // ...
}
于 2013-03-20T20:07:04.637 に答える
0

Ankurはすでに1つの方法を提案しています。もう1つの方法は、これらを定数として定義することです。Ex-プライベート静的最終文字列BOOLEAN="1";

switch(Integer.parseInt(BOOLEAN))ケース1:..。

ケース2:..。

等々。

于 2013-03-20T20:23:56.707 に答える
0

列挙型はスイッチケースで使用できるため、文字列を列挙型にマップします。すべての Enum には、String 型を enum 型に変換するvalueOf(String) メソッドがあります。次に、この列挙型をスイッチ内のさまざまなケースに一致させることができます。注意する必要があるのは、 String が列挙型に変換される有効な識別子である必要があることだけです。文字列が有効な識別子でない場合 (つまり、列挙型にキャストできない場合、IllegalArgumentExceptionが発生する可能性があります。

于 2013-03-20T20:15:03.617 に答える