我有一个像
这样的结构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动物群来打印枚举动物和鸟类的名字。有办法吗?
答案 0 :(得分:9)
不幸的是,你不能对这样的枚举进行分组。枚举Birds
与Birds
枚举中的fauna
值不同。通常的方法是添加一个也是枚举的字段:
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
s,那么您将不得不编写辅助方法来执行此操作,迭代所有Fauna
值并选择那些正确的类型。 (除非你运行Java 8,在这种情况下它只是Stream.of(Fauna.values()).filter(f -> f.type == BIRD).toList()
或类似的东西)。
答案 1 :(得分:0)
试试这个。不太确定这是你想要的。
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]);
}
}
答案 2 :(得分:0)
你应该能够直接访问枚举,
for(Animals an:Animals.values()){
System.out.println(an.name);
}
答案 3 :(得分:0)
如果你在枚举中有大的树状结构,你应该考虑使用复合模式。
答案 4 :(得分:0)
试试这个
interface Creature {
String getName();
}
enum fauna {
Animals(Animals.class), Birds(Birds.class);
Class<Creature> 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 : e.i.getEnumConstants()) {
System.out.print(x.getName() + " ");
}
}
}
输出
tiger lion peacock Owl