我可以在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做吗
# 1 楼答案
除了使用上面向枚举类型添加字段的技术外,您还可以使用纯基于方法的方法和多态性。这是更“OOP风格”,但我不认为它一定更好
不幸的是,您可能(参见下面的注释)需要定义一个接口:
但是,您可以在每个枚举元素中实现接口:
请注意,我在接口中使用默认实现来减少在枚举中需要键入的数量
关于接口的必要性:我尝试将接口中的方法作为抽象方法添加到enum顶部,Eclipse似乎允许这样做,并坚持在enum元素中实现,但随后未能正确编译这些方法。因此,看起来在没有接口的情况下它应该是可能的,但可能它还没有在编译器中实现
# 2 楼答案
我还有一个选择:
不需要外部接口,我很确定(没有测试)它在Java7上也可以工作
# 3 楼答案
是的,你可以。它看起来是这样的:
那么你可以这样称呼它:
Animal.ELEPHANT.isAmphibian()
# 4 楼答案
是Enum是Java中的一个类:
但是对于一个真实的系统,我也会把它作为一个枚举,因为有一组固定的动物类型
还要注意的是,使任何实例变量
final
也是很重要的您可以在Java Language Specification中找到有关它的更多详细信息