我有一个像下面这样的枚举public enum Game { CRICKET("cricket"), FOOTBALL("football"), VOLLEYBALL("volleyball")' private String val; private Game(String val) { this.val = val; } public String getValue() { return this.val; }}在这里,我想基于此重写 equal(),hashCode(),toString() 方法吗?在 Java 中重写 equals 和 hashCode 时应该考虑哪些问题?
3 回答
茅侃侃
TA贡献1842条经验 获得超21个赞
问题毫无意义,因为您无法覆盖enum 的equal()
andhashCode()
。
final
这是因为它们是在类中定义的Enum
,该类隐式地是所有类型的基类enum
。
有只小跳蛙
TA贡献1824条经验 获得超8个赞
不,enum
这不是一个普通的类(正如安德烈亚斯指出的,它们是final
方法)。例如,您不需要使用来equals()
比较它们,因为每个值都有一个实例enum
。这允许您使用==
。
if(gameType == Game.CRICKET)
您可以覆盖toString()
,因为默认情况下它打印的内容与 相同name()
,这只是枚举的名称(例如FOOTBALL
)。
jeck猫
TA贡献1909条经验 获得超7个赞
我的第一个问题是为什么您首先需要枚举来包含字符串。您的枚举的目的看起来已经是在特定的可能游戏列表中区分每种类型的游戏。所以枚举本身在这里充当常量值。例如你可以这样做:
public void playGame( Game myGame ){
switch(myGame){
case FOOTBALL:
playFootball();
break;
case CRICKET:
playCricket();
break;
// and so on but you get the point
}
添加回答
举报
0/150
提交
取消