如果我有一个枚举类:
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()
应该是Instance调用的,不过好像区别不止这个?
最佳答案
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
,此转换将失败有一个主体(例如,如果它覆盖了枚举的方法)。
关于java - getClass() 不能像 .class 一样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55266764/