我需要将一个Enum类指定为另一个Enum中的类变量,如下所示:
enum A {}
enum B {
Class<Enum> clazz;
}
因此,可以指向任何Enum类,如A或B或任何其他。在Java中可以做到吗?
br
声明成员字段:
public Class< ? extends Enum > clazz ;
<标题>详细信息显然可以,你可以把一个enumClass
对象作为另一个enum类定义的成员字段。
在这个示例代码中,我们定义了自己的枚举Animal
,提供了两个命名实例。枚举携带一个类型为Class
的成员字段。在该成员字段中,存储传递给构造函数的两个枚举类中的任意一个。传递在java中定义的枚举类。timepackage,DayOfWeek
和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() ) ;
在IdeOne.com上运行此代码。
java.time.Month
如果你想限制你的成员字段只包含碰巧是枚举的Class
对象,使用Java泛型。根据定义,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
类确实是Enum
的子类,而ArrayList.class
不是。
在IdeOne.com上运行泛型代码。
标题>