枚举类类型的变量



我需要将一个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,DayOfWeekMonth.

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上运行泛型代码。

最新更新