支持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);类扩展之所以不能使用的主要原因是,仅仅基于要使用的纹理创建扩展太过分了