如何比较Java 5.0之后的枚举类型?

时间:2014-12-26 12:19:27

标签: java enums

继续query,我想比较枚举常量。

我了解到:在Java 5.0中,enum关键字是作为一种特殊类型引入的,它始终扩展java.lang.Enum。此类已有equals()方法,用于比较引用(this == obj)。

enum TicTacToe{
    X, O, NULL;

    @Override
    public String toString(){
        switch(this){
        case X:
            return "X";
        case O:
            return "O";
        default:
            return "NULL";

        }
    }

}

class Grid{
    TicTacToe[][] twoDimArray = new TicTacToe[3][3];

    Grid(){
        for(int i = 0; i < 3; i++){
            for(int j = 0; j < 3; j++){
                twoDimArray[i][j] = TicTacToe.NULL; 
            }
        }
    }

    int chooseMove(boolean side){
        if(this.gameDone()){

        }else{

        }
        return 0; // give solution
    }

    boolean gameDone(){
        // Compare the elements in 2D array
        return true; // give solution
    }

    void printElements(){
        for(int i = 0; i < 3; i++){
            System.out.println(" " + twoDimArray[i][0] + " | " + twoDimArray[i][1] + " | " + twoDimArray[i][2]);
            if(i != 2)
                System.out.println("------------------");
        }
    }
}

在我比较上面gameDone()方法中的值之前,我想了解一下,我们究竟在做什么,当我们说,twoDimArray[i][j] = TicTacToe.NULL;我们是否正在创建一个枚举类型的对象并分配给每个数组中的元素?

如何比较阵列中的这些元素?因为equals()方法需要引用类型。

1 个答案:

答案 0 :(得分:2)

要比较枚举类型,您只需使用yourVariable == SomeEnumType

例如:

if (enumType == TicTacToe.NULL) {
  // Enum type is NULL!
}

您还可以实现新的equals方法,覆盖超类Enum的equals()。如果您不这样做,那么variable.equals(EnumType)variable == EnumType相同。