我目前有一个扩展Tile
类的Node
类,并希望将一组节点向下转换为Tiles数组,如下所示:
class Node<T> {
Node[] neighbours;
private final T value;
}
class Tile extends Node {
public Tile(Point value) {
super(value);
}
Tile[] neighbours = (Tile[]) this.getNeighbours;
}
目前,编译器抛出了ClassCastException并且我不知道如何修复它。
我不是100%熟悉继承,但我认为,因为Tile是一个子类,所以应该是从Nodes到Tiles的安全转换。
答案 0 :(得分:2)
如果Tile
是Node
的子类,则所有Tile
sa Node
,但不所有Node
sa Tile
s。
因此,将Node[]
转换为Tile[]
是错误的,因为不所有Node
数组都是Tile
数组。
例如,以下内容将抛出ClassCastException
:
Node[] nodes = new Node[10];
Tile[] tiles = (Tile[]) nodes;
另一方面,以下内容可行:
Node[] nodes = new Tile[10];
Tile[] tiles = (Tile[]) nodes;
答案 1 :(得分:0)
您可以使用集合,例如:
class Node<T> {
List<Node> neighbours;
private T value;
}
class Tile extends Node {
public Tile(String value) {
super(value);
}
List<Tile> neighbours = this.neighbours.stream().filter(item -> item instanceof Tile).map(item -> (Tile) item).collect(Collectors.toList());
}