如果我有一个枚举类:
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()
应该由实例调用,但是似乎区别不仅仅在于此? 最佳答案
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
具有主体,则此转换将失败(例如,如果它覆盖枚举的方法)。