getClass()不能与.class相同

时间:2019-03-20 17:22:36

标签: java class

如果我有一个枚举类:

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()应该由一个实例调用,但是似乎区别不仅仅在于此?

1 个答案:

答案 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具有主体(例如,如果它覆盖枚举的方法),则此强制转换将失败。