valueOf的方法

时间:2013-11-28 20:43:23

标签: java enums

Enum有一个 valueOf 方法:

public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)

所以,当我有枚举时:

public enum Basket {
    APPLES, ORANGES, FLOWERS 
}

代码

Basket b = Basket.valueOf(Basket.class, "APPLES");

给我带来与

相同的对象
Basket b2 = Basket.APPLES;

即, b.equals(b2)在上面两行中是正确的。

我想知道的是 - 什么是

public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
好的。

在反射API中可能会使用它 - 我现在无法将它组合在一起。除此之外,这种方法有特定用途吗?如果班级Enum没有这种方法,会遗漏什么?

与{0}}中隐含的valueOf-with-single参数相同:

Basket.valueOf("APPLES");

做同样的事情
Basket.valueOf(Basket.class, "APPLES");

有什么用?

1 个答案:

答案 0 :(得分:3)

public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)  
当您不知道确切的枚举类型时使用

。如果您正在编写通用代码,则会出现这种情况。一个例子是将json反序列化为java对象。您可以通过反射和调用来获取字段的'enumType',

Enum.valueOf(enumClass,fieldValue)

如果您想查看实际使用情况,请检查

java.io.ObjectInputStream#readEnum