Java instanceof - PullRequest
       11

Java instanceof

0 голосов
/ 14 мая 2018

У меня есть узел (узел Gridpane), и я хочу получить instanceof из класса, но ни для узла, ни для любого объекта я не могу получить instanceof своего класса, мне нужно добавить что-то в класс, чтобы сделать "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" к 'Sample.Figures.blackPawn'

класс черной пешки

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;
}

}

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Оператор java instanceof используется для проверки того, является ли объект экземпляром указанного типа ( класс или подкласс )

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

0 голосов
/ 14 мая 2018

Вы пытаетесь выполнить приведение, которое никогда не будет возможно, и компилятор не позволит вам сделать это.

Например,

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

не допускается, потому что String и Integer не находятся в одной иерархии классов, поэтому такое приведение никогда не будет возможным. Компилятор позволит вам сделать это:

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

но это выдаст ClassCastException во время выполнения.

В вашем случае вам, вероятно, нужно каким-то образом извлечь Figure из Node, чтобы определить, есть ли черная пешка в этом узле, как в

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.

...