java - getClass() 不能像 .class 一样工作

标签 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()应该是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/

相关文章:

java - 如何在AppCompatActivity之后添加多个实现?

r - 在R中,处理错误:ggplot2不知道如何处理数值类的数据

c++ - 通过构造函数初始化成员函数

class - 模板参数 : enum, 类或枚举类

java - 如何在 Spring Data JPA 中实现与额外列的多对多关系?

java - IntelliJ : Automatic artifact discovery for an executable jar

java - 在多模块 Maven 项目中运行 exec-maven-plugin 时出现问题

java |防止除下划线之外的任何特殊字符

java - 如何将对象传递给 Thymeleaf 中的模态对话框?

java - Java中使用PreparedStatementCreator这个方法的解释是什么?