迭代枚举枚举
我有一个类似的结构
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 Birds
与fauna
内的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