有没有一种简单的方法来子类化Javaenum
?
我问这个问题是因为我有大约 10 个实现相同接口的对象,但它们对某些方法也有相同的实现,因此我想通过将所有相同的实现放置在扩展的中间对象中来重用代码Enum
它也是我需要的所有其他类的超类。
或许事情并没有我想象的那么简单?
预先感谢
你做不到,因为语言不允许你这样做。出于一个很好的逻辑原因:只有当你可以时,对枚举进行子类化才有意义remove来自子类的一些枚举值,而不是add新的。否则你会打破里氏替换原则 http://en.wikipedia.org/wiki/Liskov_substitution_principle.
简而言之,只要需要超类的实例,子类的每个实例都应该是可接受的。如果您在枚举子类中添加新的枚举成员,那么只知道超级枚举的人显然无法接受。
有关更多详细信息和可能的替代方案,请参阅我之前的回答 https://stackoverflow.com/questions/3427947/enumeration-inheritence-in-java/3428050#3428050.
在你的具体情况下,@Jason的建议可能会提供一个很好的解决方案(对他来说+1:-)
更新@OrangeDog 的评论
好点,我上面有点草率:-)在实施方面你是对的。然而,从逻辑的角度来看,枚举类型是由其有效值集完整描述的。一般来说,一个适当的子类是专业化它的超类。换句话说,有效子类实例的集合(应该)始终是subset超类实例集。(每只狗都是动物,但并非每只动物都是狗。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)