猿问

覆盖 Enum 中的 equal、toString、hashcode 方法

我有一个像下面这样的枚举


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 时应该考虑哪些问题?


神不在的星期二
浏览 134回答 3
3回答

茅侃侃

问题毫无意义,因为您无法覆盖enum 的equal()andhashCode()。final这是因为它们是在类中定义的Enum,该类隐式地是所有类型的基类enum。

有只小跳蛙

不,enum这不是一个普通的类(正如安德烈亚斯指出的,它们是final方法)。例如,您不需要使用来equals()比较它们,因为每个值都有一个实例enum。这允许您使用==。if(gameType == Game.CRICKET)您可以覆盖toString(),因为默认情况下它打印的内容与 相同name(),这只是枚举的名称(例如FOOTBALL)。

jeck猫

我的第一个问题是为什么您首先需要枚举来包含字符串。您的枚举的目的看起来已经是在特定的可能游戏列表中区分每种类型的游戏。所以枚举本身在这里充当常量值。例如你可以这样做:public void playGame( Game myGame ){  switch(myGame){    case FOOTBALL:       playFootball();      break;    case CRICKET:      playCricket();      break;   // and so on but you get the point}
随时随地看视频慕课网APP

相关分类

Java
我要回答