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语句分配给字符串变量。
你组织这个的方式取决于你。
您不能为其分配字符串。将路径存储在另一个变量中。
例如。:
1 2 3 4 5 | String piecePath; switch (piece){ case NONE: piecePath ="E:\\Eclipse\\ChessF\\src\\Images\\EmptySquare.jpg"; ... |
当您执行