我可以添加一个函数枚举在Java中?

我有一个枚举,看起来像

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中执行吗?

是的Enum是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; } } 

但是对于一个真正的系统来说,我会把它作为一个Enum,因为有一组固定types的动物。

 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也要使任何实例variables都是最重要的。

是的你可以。 它看起来像这样:

 public enum Animal { ELEPHANT(false), GIRAFFE(false), TURTLE(false), SNAKE(false), FROG(true); private final boolean isAmphibian; Animal(boolean isAmphibian) { this.isAmphibian = isAmphibian; } public boolean isAmphibian() { return this.isAmphibian; } } 

那么你会这样称呼它:

Animal.ELEPHANT.isAmphibian()