Stringとして名から任意の列挙型のインスタンスを取得する方法

約束:

私はいくつかの定数をそれぞれに様々な列挙型があるとします。

public enum MyEnum1 {

ConstantA(),
ConstantB(),
ConstantC();

}

public enum MyEnum2 {

ConstantA(),
ConstantB(),
ConstantC();

}

私が呼び出すことができるように、どのように私は自分の名前から任意にこれらの列挙型のいずれかのインスタンスを取得することができますEnum.values()に。

何かのようなもの: Enum<?> myEnumInstance = //something

目標は、呼び出すことがある.values()と述べた任意の定数内のデータを検索し、取得するために、enumユーザーのテキスト入力に基づきます。

SDJ:

あなたの列挙型がポリモーフィックアクセスされることを意図されたデータを保存する場合、それらは、適切なインタフェースを実装する必要があります。のは、このデータが単一であるとしましょうint、そして列挙型は、(使用して次のようになりますIntSupplierを):

public enum MyEnum1 implements IntSupplier {

    ConstantA(1),
    ConstantB(2),
    ConstantC(3);

    private final int number;

    private MyEnum1(int number) { this.number = number; }
    public int getAsInt() { return number; }
}

そして、あなたは正しく入力されている列挙値(定数)のリストを取得するためにそのインターフェイスを活用することができます:

IntSupplier[] myEnums = Class.forName("MyEnum1")
            .asSubclass(IntSupplier.class)
            .getEnumConstants();

そして値を取得することを使用します。

for(IntSupplier value : myEnums) {
        System.out.println(value.getAsInt());
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=332203&siteId=1