1

私はコードを持ってifおりelse if、いくつかのタイプを見つけて、そこからそれぞれの値を作成しています。フォーラムで次の投稿を見つけましたが、のようなタイプはありませんboolean、私のタイプはbollean.edmなどですchar.edm

私のケースをサポートするために、次のコードを調整して使用する方法はありますか?

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) {
    }
}
4

1 に答える 1

1

thisによると、それはあなたのミステリアスなドキュメントのように見えますOdata type。多かれ少なかれ機能するソリューションは次のようになります (String typeName 値を標準の java.lang.classesからそれらに変更するだけOdata typeです ;)):

public class Test {
    public static void main(String[] args) throws InterruptedException {
            String typeName = "Edm.Double";
            String namePreparedForEncoding = typeName.replace('.', '_');
            Type type = Type.valueOf(namePreparedForEncoding);
            System.out.println(type);

            String memberValue = "42.99";
            SwitchInputType<?> value = type.makeType(memberValue);
            System.out.println(value);

            String typeName1 = "Edm.Int32";
            String namePreparedForEncoding1 = typeName1.replace('.', '_');
            Type type1 = Type.valueOf(namePreparedForEncoding1);
            System.out.println(type1);

            String memberValue1 = "42";
            SwitchInputType<?> value1 = type1.makeType(memberValue1);
            System.out.println(value1);
    }

    enum Type {
        Edm_Boolean {
            SwitchInputType makeType(String memberValue) {
                return new SwitchInputType<Boolean>(new Boolean(memberValue));
            }
        },
        Edm_Double {
            SwitchInputType makeType(String memberValue) {
                return new SwitchInputType<Double>(new Double(memberValue));
            }
        },
        Edm_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> {
        private Object o;

        public SwitchInputType(Object o) {
            this.o = o;
        }

        @Override
        public String toString() {
            return "SwitchInputType: " + o.toString();
        }
    }
}

出力:

Edm_Double
SwitchInputType: 42.99

Edm_Int32
SwitchInputType: 42

お気づきかもしれませんが、enumEdm.をin enumに置き換えました。Edm_

PS:

ビットtoString()メソッドを変更すると、変換が実際に機能していることを確認できます:

    public String toString() {
        return String.format("SwitchInputType: (%s) %s", o.getClass().getSimpleName(), o);
    }

結果:SwitchInputType: (Double) 42.99

これがお役に立てば幸いです

于 2013-03-23T10:41:22.177 に答える