混合枚举对象
让两个类实现相同的接口,并使用您需要的任何方法。
然后创建包含该接口对象而不是枚举类的列表。
提示:从 Java 16 开始,可以在本地定义接口、枚举和记录。
interface Animal {}
enum Pet implements Animal { DOG, CAT ; }
enum Wild implements Animal { LION , ORCA ; }
List< Animal > felines = List.of( Pet.CAT , Wild.LION ) ;
混合枚举类
如果枚举的类是你想要收集的,使用Class类。
List< Class > myEnumClasses = List.of( Pet.class , Wild.class ) ;
Java 中的枚举隐式扩展了Enum 类。所以我们可以更具体地使用我们的列表类型。
List < Class < ? extends Enum > > myEnumClasses = List.of( Pet.class , Wild.class );
myEnumClasses.toString(): [类 demo.App$1Pet,类 demo.App$1Wild]
关于最后一部分,您的最终目标是循环 Enum 类以在每个类上调用隐式 Enum 方法 public static T[] values()……使用在 Class 类上找到的特殊方法:getEnumConstants。该方法返回枚举对象的数组。
为方便起见,我们可以将该数组传递给List.of,以便通过调用List#toString 轻松生成枚举对象的文本表示。
for ( Class < ? extends Enum > e : myEnumClasses )
{
System.out.println( "e = " + e );
System.out.println( List.of( e.getEnumConstants() ) ); // Pass the array T[] to `List.of` for convenient printing.
}
运行时。
e = class demo.App$1Pet
[DOG, CAT]
e = class demo.App$1Wild
[LION, ORCA]