gpt4 book ai didi

java - 枚举类类型的变量

转载 作者:行者123 更新时间:2023-12-04 08:04:02 25 4
gpt4 key购买 nike

我需要将一个 Enum 类指定为另一个 Enum 中的类变量,如下所示:

enum A {}
enum B {
Class<Enum> clazz;
}
这样 clazz 就可以指向任何 Enum 类,如 A 或 B 或任何其他类。
可以用Java来做吗?

最佳答案

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.classArrayList.class得到一个编译器错误。我们声明了我们的 clazz成员字段为持有 Class表示一个类的对象,该类是 Enum 的子类. Month class 确实是 Enum 的子类而 ArrayList.class不是。
使用泛型运行该代码 live at IdeOne.com .

关于java - 枚举类类型的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66309963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com