Java Enum序列和交换机功能

时间:2013-07-03 00:55:18

标签: java enums

我需要的是一个允许以下内容的枚举:

想象一下,我有一个名为ANIMALS的枚举,其中包含以下元素:MammalFishBird

我想要的是,Mammal内有更多枚举,例如cowtigerpony

应该可以这样使用:

switch(animals)
{
case Mammal:
     do something specific for all mammals
     switch(animals.mammal)
     {
     case Cow:
         do something specific for cow
         break;
     case Tiger:....
     }
case Fish:
    ....
}

如果已经实施,请告诉我该怎么做;如果不是,请帮我找到办法。

顺便说一下,我实际需要做的是区分哪个TextureGameElement我应该使用的类型。例如,InteriorWall具有与ExteriorWall不同的纹理,因此我希望它们的枚举不同。

使用示例:WallType.InteriorWall.Texture1

2 个答案:

答案 0 :(得分:2)

ENUM并非旨在满足您的要求。 您似乎想要使用经典object oriented design。 例如:

public abstract class Animal {
}

public class Mammal extends Animal {
}

同时查看composite reuse

答案 1 :(得分:0)

您可以制作两个单独的enum并将它们组合起来,以实现类似于您所描述的内容。

public enum Classification {
    MAMMAL, FISH, BIRD;
}

public enum Animal {
    TIGER(MAMMAL), COW(MAMMAL), BLUEJAY(BIRD), TROUT(FISH);

    private final Classification clazz;

    private Animal(Classification clazz) {
        this.clazz = clazz;
    }

    public Classification getClassification() {
        return clazz;
    } 
}

Animal a = ...
switch(a.getClassification()) {
    case MAMMAL:
    /* etc */
}