如果我有一个枚举类:
enum WorkDays {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY;
}
我有:
WorkDays day1 = WorkDays.valueOf("MONDAY");
方法:
public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
如果我强制检查enumType,我可以写:
WorkDays day2 = Enum.valueOf(WorkDays.class,"TUESDAY");
但这不能是
WorkDays day2b = Enum.valueOf(day1.getClass(), "MONDAY");
大多数人说Object.class
应该由一个类调用,而getClass()
应该由一个实例调用,但是似乎区别不仅仅在于此?
答案 0 :(得分:1)
getClass
返回一个Class<? extends WorkDays>
,但是Enum.valueOf
期望其第一个参数为Class<WorkDays>
。
要获取正确的类类型,即Class<WorkDays>
,可以使用the getDeclaringClass
method:
WorkDays day2b = Enum.valueOf(day1.getDeclaringClass(), "MONDAY");
现在,day1
是是Workdays
,所以您也可以强制转换为正确的类型:
WorkDays day2b = Enum.valueOf((Class<WorkDays>) day1.getClass(), "MONDAY");
请注意,如果MONDAY
具有主体(例如,如果它覆盖枚举的方法),则此强制转换将失败。