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");
有什么用?
答案 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