8200

[code]

    public enum MyEnum {
        HOGE,
        FUGA;
    }
    
[/code]

下記のClass<?>とStringからMyEnum.HOGEを取得するにはどうすれば良いでしょうか？  
またClass<?>型(cl)からenum値すべて列挙可能でしょうか？

[code]

    class<?> cl = MyEnum.class;
    String value = "HOGE";
    
[/code]


CC BY-SA 3.0
2015-03-20T13:20:47.093
8197
2015-03-20T14:31:01.797
4191
question
java
Class型と文字列から対応するenum値を取得するには？


試していないのでうまくいかないかもですが、classオブジェクトを使って`name()`をリフレクションで呼ぶという方法はどうでしょうか？


CC BY-SA 3.0
2015-03-20T13:50:09.867
8198
2015-03-20T13:50:09.867
845
8197
answer


[`Enum#valueOf()`](http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#valueOf-
java.lang.Class-java.lang.String-) が、そのものではないでしょうか。

[code]

    Enum<?> v = Enum.valueOf(MyEnum.class, "HOGE");
    System.out.println(v == MyEnum.HOGE); // true
    System.out.println(v == MyEnum.FUGA); // false
    
[/code]

列挙は
[`Class#getEnumConstants()`](http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getEnumConstants--)
でできそうです。


CC BY-SA 3.0
2015-03-20T13:53:26.500
8199
2015-03-20T14:00:26.347
2015-03-20T14:00:26.347
208
208
8197
answer


[`Class#getEnumConstants()`](http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getEnumConstants--)で列挙型の定数一覧を取得できます。

[code]

    Class<?> cl = MyEnum.class;
    String value = "HOGE";
    
    for (Object o: cl.getEnumConstants()) {
      if (o.toString().equals(value)) {
        System.out.println(String.format("%s:%s", o.getClass(), o));
        // class MyEnum:HOGE
        System.out.println(o.equals(MyEnum.HOGE));
        // true
      }
    }
    
[/code]


CC BY-SA 3.0
2015-03-20T14:02:02.163
8200
2015-03-20T14:07:19.377
2015-03-20T14:07:19.377
49
49
8197
answer


列挙してみました。

[code]

    Class<?> cl = MyEnum.class;
    
    Field[] fields = cl.getFields();
    for (Field f: fields) {
        String name = f.getName();
        Enum e = (Enum) f.get(null);
        System.out.printf("%s=%d\n", name, e.ordinal());
    }
    
[/code]


CC BY-SA 3.0
2015-03-20T14:31:01.797
8202
2015-03-20T14:31:01.797
5288
8197
answer