作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要将一个 Enum 类指定为另一个 Enum 中的类变量,如下所示:
enum A {}
enum B {
Class<Enum> clazz;
}
这样 clazz 就可以指向任何 Enum 类,如 A 或 B 或任何其他类。
最佳答案
tl;博士
声明一个成员字段:
public Class< ? extends Enum > clazz ;
细节
Class
对象作为另一个枚举的类定义的成员字段。
Animal
,提供两个命名实例。我们的枚举带有一个类型为
Class
的成员字段.在该成员字段中,我们存储传递给构造函数的两个枚举类中的一个。我们传递在 java.time 包中定义的枚举类,
DayOfWeek
amd
Month
.
enum Animal {
// Instances.
DOG( DayOfWeek.class ) , CAT( Month.class ) ;
// Member fields.
final public Class clazz ;
// Constructor
Animal( Class c ) {
this.clazz = c ;
}
}
访问该成员字段。
System.out.println( Animal.CAT.clazz.getCanonicalName() ) ;
运行此
code live at IdeOne.com .
java.time.Month
Class
碰巧是枚举的对象,使用
Java Generics .根据定义,Java 中的枚举都是
Enum
的隐式子类。 .
enum Animal {
DOG( DayOfWeek.class ) , CAT( Month.class ) ;
final public Class< ? extends Enum > clazz ;
Animal( Class< ? extends Enum > c ) {
this.clazz = c ;
}
}
在上面的代码中,更改
Month.class
至
ArrayList.class
得到一个编译器错误。我们声明了我们的
clazz
成员字段为持有
Class
表示一个类的对象,该类是
Enum
的子类.
Month
class 确实是
Enum
的子类而
ArrayList.class
不是。
关于java - 枚举类类型的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66309963/
我是一名优秀的程序员,十分优秀!