无法实例化Chessboard.Type类型

时间:2016-05-05 01:36:41

标签: java enums

好的,所以我正在开展一个学校项目,我们将C ++转换为java,而且我已经相当远了。该项目是一个国际象棋游戏。这是代码:

package Chess;

import java.util.Enumeration;

public class ChessBoard{
/* This enum represents values for each of the possible "pieces" that can
 * occupy a space on the chess board, including "blank" for a vacant space.
 */


public enum Type
{
  BLANK,
  PAWN,
  BISHOP,
  KNIGHT,
  ROOK,
  QUEEN,
  KING;

    public int getValue()
    {
        return this.ordinal();
    }

    public static Type forValue(int value)
    {
        return values()[value];
    }
}

public class Coord
{
  public short m_X;
  public short m_Y;
}

public class GlobalMembers
{
    /* These const values are used for identifying whether the "piece" occupying
     * a chess board space is black, white, or in the case of a blank spot,
     * "clear."
     */

    public static final short BLACK = 0;

    public static final short WHITE = 1;

    public static final short CLEAR = 2;

    public static final short CHECK_MOVE = 1; // this is a piece move "mode" designating an AI board evaluation

    public static final short REAL_MOVE = 2; // this is a piece move "mode" designating an actual AI move
}


public class ChessPiece
{

  /* The ctor for ChessPiece takes a piece type and color.
   */

  public ChessPiece(Type type, short color)
  {
      this.m_type = type;
      this.m_color = color;
      this.m_moves = 0;
  }
  public void dispose()
  {
  }

  /* This member function returns the chess piece type.
   */

  public final Type getType()
  {
    return m_type;
  }

  /* This member function returns the chess piece color.
   */

  public final short getColor()
  {
    return m_color;
  }

  /* This function is used to record a new movement of a piece. Movement tracking
   * is necessary for evaluating validity of special piece moves like en passant
   * capture and castling.
   */

  public final void incrementMoves()
  {
    ++m_moves;
  }

  /* Reduces the number of times a piece has been moved. Used for adjustment when
   * a function incidentally increments the movement of a piece in a case where
   * a board evaluation is taking place, and is not intended as an actual move.
   */

  public final void decrementMoves()
  {
    --m_moves;
  }

  /* Returns the number of times a piece has been moved.
   */

  public final int getMoves()
  {
    return m_moves;
  }
  private Type m_type = new Type(); // this variable holds the type of piece this object represents

  private short m_color; // this variable holds the color of the piece, white or black
  private int m_moves; // this variable holds the number of moves the piece has made
}

}

问题在于我开始

private Type m_type = new Type();

它声明“无法实例化Chessboard.Type类型”

现在我到处寻找here

正如您所看到的那样,程序与此程序非常不同,并且只要您引用程序中的Type,就会抛出所有这些程序。有谁知道如何解决这一问题?

3 个答案:

答案 0 :(得分:2)

停止尝试实例化枚举类型。

例如,您可以将初始化写入以下内容:

private Type m_type = Type.BLANK;

答案 1 :(得分:1)

您无法实例化枚举类型的变量。

您应该将UNKNOWN添加到Type,然后使用默认值Type.UNKNOWN初始化m_type,然后在构造函数中将其设置为正确的值。

答案 2 :(得分:0)

Type是一个枚举,而不是可用于实例化对象的类。详细了解枚举here