无法从String转换为(应该是另一个String)

时间:2013-03-22 15:08:29

标签: java string enums

我正在尝试使用枚举来存储一堆字符串,但是当我将它们转换为字符串时它不起作用。我得到错误“无法从String转换为ChessSquare.SelectedPiece。我认为它只会有一点变化,但我找不到要改变的内容。

这是我的代码:

package Logic;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;


    //chess square class, 1 instance of which for each square in the grid
    @SuppressWarnings("serial")
    public class ChessSquare extends JButton {

        //instance variables for position and pieces
        public int posX;
        public int posY;
        public String currentPiece;
        public enum selectedPiece{
            NONE, PAWN, ROOK, KNIGHT, BISHOP, QUEEN, KING
        }
        selectedPiece piece;

        //load images and cast into icons
        BufferedImage buttonIcon = ImageIO.read(new File(piece));
            ImageIcon Icon = new ImageIcon(buttonIcon);
                BufferedImage 

        //constructor for chess squares
        public ChessSquare(int x, int y, double p) throws IOException {
            this.setIcon(Icon);
                setVisible(true);
            }

        //accessor method for position
        public void squarePos(int x, int y){
            this.posX = x;
            this.posY = y;
        }

        //accessor method for currentPiece
        public void cPiece(){
            this.currentPiece = piece;
        }

        //specify what each value of enum slectedPiece represents
        public void selectedPiece(){
            switch (piece){
                case NONE:
                        piece = "E:\\Eclipse\\ChessF\\src\\Images\\EmptySquare.jpg";
                case PAWN:
                        piece = "E:\\Eclipse\\ChessF\\src\\Images\\Pawn.jpg";
                case ROOK:
                        piece = "E:\\Eclipse\\ChessF\\src\\Images\\Rook.jpg";
                case KNIGHT:
                        piece = "E:\\Eclipse\\ChessF\\src\\Images\\Knight.jpg";
                case BISHOP:
                        piece = "E:\\Eclipse\\ChessF\\src\\Images\\Bishop.jpg";
                case QUEEN:
                        piece = "E:\\Eclipse\\ChessF\\src\\Images\\Queen.jpg";
                case KING:
                        piece = "E:\\Eclipse\\ChessF\\src\\Images\\King.jpg";
            }
        }
    }

6 个答案:

答案 0 :(得分:2)

在Java中,enum是一个完整的类...因此,你应该将你的枚举操作(转换为/来自字符串)放在其中。例如:

    public enum SelectedPiece{
        NONE("E:\\Eclipse\\ChessF\\src\\Images\\EmptySquare.jpg"), 
        PAWN("E:\\Eclipse\\ChessF\\src\\Images\\Pawn.jpg"), 
        ROOK("E:\\Eclipse\\ChessF\\src\\Images\\Rook.jpg"), 
        KNIGHT("E:\\Eclipse\\ChessF\\src\\Images\\Knight.jpg"), 
        BISHOP("E:\\Eclipse\\ChessF\\src\\Images\\Bishop.jpg"), 
        QUEEN("E:\\Eclipse\\ChessF\\src\\Images\\Queen.jpg"), 
        KING("E:\\Eclipse\\ChessF\\src\\Images\\King.jpg");

        private String imageFilename;
        private ImageIcon image;

        private SelectedPiece( String imageFilename ) throws IOException {
            this.imageFilename = imageFilename;
            this.image = new ImageIcon(ImageIO.read(new File(piece)));
        }

        public String getImageFilename() {
            return imageFilename;
        }

        public ImageIcon getImage() {
            return image;
        }
    }

等等......然后在需要的地方使用枚举值。

答案 1 :(得分:1)

枚举不是字符串。要在它们之间进行转换,您需要使用valueOf

如,

selectedPiece.valueOf("ROOK");

将返回enum selectedPiece.ROOK

编写枚举时,您可以使用自定义值,例如

Public enum Piece {
  ROOK("Rook"),
  QUEEN("Queen")
}

答案 2 :(得分:0)

执行this.currentPiece = piece;时,您试图在String对象中分配枚举类型。这是不可能的。

答案 3 :(得分:0)

piece的类型为selectedPiece(您的枚举)

不允许为其分配字符串。将路径存储在另一个变量中。

例如:

String piecePath;
switch (piece){
                    case NONE:
                            piecePath = "E:\\Eclipse\\ChessF\\src\\Images\\EmptySquare.jpg";
 ...

答案 4 :(得分:0)

您应该使用枚举作为类中的变量来确定其类型。你可以简单地添加:

    public selectedPiece pieceType;

然后在对象中的某处设置类型:

    pieceType = selectedPiece.ROOK;

然后,您可以使用enum将switch语句分配给字符串变量。

您的组织方式取决于您。

答案 5 :(得分:0)

也许这是使用CONSTANTS的情况?毕竟如果一个pawn的图形图像总是要是同一个图像,那不能使它保持不变吗?

static final string IMAGE_NONE = "E:\\Eclipse\\ChessF\\src\\Images\\EmptySquare.jpg";
static final string IMAGE_PAWN = "E:\\Eclipse\\ChessF\\src\\Images\\Pawn.jpg";

并在您的案例陈述中

case PAWN:
  piece = IMAGE_PAWN 

等等