支持Java枚举序列和开关

支持Java枚举序列和开关,java,enums,Java,Enums,我需要的是一个枚举,它允许以下操作: 假设我有一个名为动物的枚举,其中包含以下元素:哺乳动物,鱼,鸟 我想让哺乳动物有更多的枚举,比如奶牛,老虎,小马 它应该是这样使用的: switch(animals) { case Mammal: do something specific for all mammals switch(animals.mammal) { case Cow: do something specific for cow

我需要的是一个枚举,它允许以下操作:

假设我有一个名为
动物
的枚举,其中包含以下元素:
哺乳动物

我想让
哺乳动物
有更多的枚举,比如
奶牛
老虎
小马

它应该是这样使用的:

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:
    ....
}
如果已经实施,请告诉我如何实施;如果不是,请帮助我找到一种方法

顺便说一句,我实际上需要做的是区分我应该使用的
纹理
游戏元素
类型。例如,
内墙
外墙
具有不同的纹理,因此我希望它们的枚举不同


使用示例:
WallType.InteriorWall.Texture1

您可以制作两个单独的
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 */
}

枚举不是为满足您的要求而设计的。 看来你想用经典。 例如:

public abstract class Animal {
}

public class Mammal extends Animal {
}

还可以看一看。

怎么看?你能给我举个例子吗?我怀疑OP是Java新手。如果我是对的,他/她可能会欣赏使用
clazz
这个词背后的原因,即使这对更有经验的程序员来说是显而易见的。我之所以使用
clazz
这个词,是因为
是Java语言中的一种语言。如果您尝试使用它作为变量名,您将得到一个编译器错误。感谢您的澄清。。。但这不行。这一切背后我的简单目标是简化我在游戏中创建新元素的方式。通过生成类似构造函数的元素(X,Y,ElementType.SPECIAL.SpecialTexture1);我不需要创建更多的类,也不需要过度扩展代码。构造器会通过检查“我是特别的,默认的还是示例的?好吧,我是特别的,现在在特别的内部,哪是我的纹理,特别的1,特别的2还是特别的3?”来构建它自己。我不知道,这似乎是一种聪明的方法…这真的是一种方法。枚举在Java中非常强大,但基本对象继承本身可以走很长的路。我不想要实际的类,因为我的最终目标是区分我要使用的纹理,因为一个元素可以有很多纹理(比如说,一个地板有一个默认图像或一个破碎的图像,为游戏添加一点魔力),这就是为什么我尝试使用枚举来区分它是什么类型的元素,而且在元素内部,哪个特定的纹理,但是因为我使用openGL,在这之前我绑定了一个精灵表,我只需要知道它是什么样的纹理,即它在sprite Sheet中的位置。这是一个比使用
enum
s更好的选择,因为它们能够在
switch
语句中使用。最后,我的目标是使新元素的构造更容易,比如说墙,构造函数调用将是墙(X,Y,WallType.over.Texture1);类扩展之所以不能使用的主要原因是,仅仅基于要使用的纹理创建扩展太过分了