迭代枚举枚举

我有一个类似的结构

public class EnumTest{ enum fauna { Animals, Birds; enum Animals { Tiger("tiger"), Lion("lion"); String name; Animals(String name) { this.name = name; } } enum Birds { Peacock("peacock"), owl("Owl"); String name; Birds(String name) { this.name = name; } } } } 

现在我找不到一种方法来迭代enum动物群来打印枚举动物和鸟类的名字。 有什么办法吗?

不幸的是,你不能对这样的枚举进行分组。 enum Birdsfauna内的Birds不同。 通常的方法是添加一个也是枚举的字段:

 enum Fauna { enum Type { MAMMAL, BIRD } TIGER(Type.MAMMAL), LION(Type.MAMMAL), PEACOCK(Type.BIRD), OWL(Type.BIRD); private final Type type; Fauna(Type type) { this.type = type; } } 

如果您只想要特定类型的动物,例如所有BIRD ,那么您将不得不编写辅助方法来执行此操作,迭代所有Fauna值并选择正确类型的Fauna 。 (除非你运行Java 8,在这种情况下它只是Stream.of(Fauna.values()).filter(f -> f.type == BIRD).toList()或类似的东西)。

尝试这个。 不太确定这是你想要的。

 public static void main(String[] args) { EnumTest.fauna[] values = EnumTest.fauna.values(); for (int i = 0; i < values.length; i++) { System.out.println(values[i]); } } 

你应该能够直接访问枚举,

 for(Animals an:Animals.values()){ System.out.println(an.name); } 

如果你在枚举中有大的树状结构,你应该考虑使用复合模式。

试试这个

 interface Creature { String getName(); } enum fauna { Animals(Animals.class), Birds(Birds.class); Class i; fauna(Class i) { this.i = i; } enum Animals implements Creature { Tiger("tiger"), Lion("lion"); String name; Animals(String name) { this.name = name; } public String getName() { return name; } } enum Birds implements Creature { Peacock("peacock"), owl("Owl"); String name; Birds(String name) { this.name = name; } public String getName() { return name; } } } public static void main(String[] args) throws Exception { for(fauna e : fauna.values()) { for(Creature x : eigetEnumConstants()) { System.out.print(x.getName() + " "); } } } 

产量

 tiger lion peacock Owl