Java instanceof



我有一个节点(网格窗格节点(,我想从类中获取实例,但无论是节点还是任何对象,我都无法获得我的类的实例,我需要向类添加一些东西来做"实例"还是我做错了?

public void Move(GridPane gridPane) {
for (Node node : gridPane.getChildren()) {
if (GridPane.getColumnIndex(node) == this.x && GridPane.getRowIndex(node) == this.y - 2) {
if (node instanceof blackPawn) {
gridPane.setRowIndex(node, this.y);
gridPane.setColumnIndex(node, this.x);
}
break;
}
}
}

不可转换类型;不能将"javafx.scene.Node"转换为 '样品。数字.黑棋子'

黑棋子类

package sample.Figures;
import javafx.event.EventHandler;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
public class blackPawn {
public int x;
public int y;
public ImageView IMG = createChestImage();
private int j = 0;
public blackPawn(){}
public blackPawn(int x,int y)
{
this.x = x;
this.y = y;
}
private ImageView createChestImage() {
final ImageView iv = new ImageView(new Image("sample/Sprites/blackPawn.png"));
iv.setOnMouseEntered(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
iv.setImage(new Image("sample/Sprites/blackPawnStroke.png"));
j = 0;
}
});
iv.setOnMouseExited(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if(j == 0)
iv.setImage(new Image("sample/Sprites/blackPawn.png"));
}
});
iv.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
iv.setImage(new Image("sample/Sprites/blackPawnStroke.png"));
j = 1;
}
});
return iv;
}
}

您正在尝试一种永远不可能的强制转换,编译器不会让您这样做。

例如

String s = "hello";
Integer i = (Integer) s;

不允许,因为StringInteger不在同一类层次结构中,因此此强制转换永远不可能。编译器将允许您执行以下操作:

String s = "hello";
Object o = s;
Integer i = (Integer) o;

但这会在运行时引发ClassCastException

在您的情况下,您可能需要以某种方式从Node中提取Figure,以确定该节点上是否有黑色棋子,如

if (getFigureForNode(node) instanceof BlackPawn) {
...

用方法

Figure getFigureForNode(Node n)

假设BlackPawn extends(或implements(Figure

代码异味

请注意,使用instanceof通常不是好的设计。您可能希望改用方法isBlackPawn(Figure f),如return f.getFigureType() == FigureType.PAWN && f.getPlayerColor() == PlayerColor.WHITE.

javainstanceof 运算符用于测试对象是否为指定类型(类或子类(的实例

http://www.java2s.com/Tutorial/Java/0060__Operators/TheinstanceofKeyword.htm

最新更新