关于java:无法从String转换为(应该是另一个String)

Cannot convert from String to (what should be another String)

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

这是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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\
ook.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";
            }
        }
    }


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    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\
ook.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;
        }
    }

依此类推......然后在需要的地方使用枚举值。


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

例如。,

1
selectedPiece.valueOf("ROOK");

将返回enum selectedPiece.ROOK

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

1
2
3
4
Public enum Piece {
  ROOK("Rook"),
  QUEEN("Queen")
}


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

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

在您的案例陈述中

1
2
case PAWN:
  piece = IMAGE_PAWN

等等


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

1
    public selectedPiece pieceType;

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

1
    pieceType = selectedPiece.ROOK;

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

你组织这个的方式取决于你。


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

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

例如。:

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

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