我可以在Java中的枚举中添加一个函数吗?
问题描述:
我有一个枚举,看起来像
I have an enum, which looks like
public enum Animal {
ELEPHANT,
GIRAFFE,
TURTLE,
SNAKE,
FROG
}
我想做一些像
Animal frog = Animal.FROG;
Animal snake = Animal.SNAKE;
boolean isFrogAmphibian = frog.isAmphibian(); //true
boolean isSnakeAmphibian = snake.isAmphibian(); //false
boolean isFrogReptile = frog.isReptile(); //false
boolean isSnakeReptile = snake.isReptile(); //true
boolean isFrogMammal = frog.isMammal(); //false
boolean isSnakeMammal = snake.isMammal(); //false
我简化了教学目的的例子,但这对我来说真的很有用现实生活中的例子可以在Java中执行吗?
I simplified the example for didactic purposes, but this would be really useful to me for my real life example. Can I do it in Java?
答
是枚举是Java中的一个类:
Yes Enum is a class in Java:
public enum Animal
{
ELEPHANT(true),
GIRAFFE(true),
TURTLE(false),
SNAKE(false),
FROG(false);
private final boolean mammal;
private Animal(final boolean mammal) { this.mammal = mammal; }
public boolean isMammal() { return this.mammal; }
}
但在你的情况下,一个真正的系统我会使一个枚举为好的,因为有一组固定的动物。
but in your case for a real system I would make that an Enum as well since there is a fixed set of types of animals.
public enum Type
{
AMPHIBIAN,
MAMMAL,
REPTILE,
BIRD
}
public enum Animal
{
ELEPHANT(Type.MAMMAL),
GIRAFFE(Type.MAMMAL),
TURTLE(Type.REPTILE),
SNAKE(Type.REPTILE),
FROG(Type.AMPHIBIAN);
private final Type type;
private Animal(final Type type) { this.type = type; }
public boolean isMammal() { return this.type == Type.MAMMAL; }
public boolean isAmphibian() { return this.type == Type.AMPHIBIAN; }
public boolean isReptile() { return this.type == Type.REPTILE; }
// etc...
}
另请注意,重要的是使任何实例变量 final
。
Also note that it is important to make any instance variable final
as well.