如何向下转换 Java 中的数组?
How to downcast an array in Java?
我目前有一个 Tile
class 扩展了 Node
class,我想像这样将一个节点数组向下转换为一个 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 是一个子class,这应该是从 Nodes 到 Tiles 的安全转换。
如果 Tile
是 Node
的子 class,则所有 Tile
都是 Node
,但 不是 所有 Node
个 Tile
个
因此将 Node[]
转换为 Tile[]
是错误的,因为 并非 所有 Node
数组都是 Tile
数组。
例如,以下将抛出 ClassCastException
:
Node[] nodes = new Node[10];
Tile[] tiles = (Tile[]) nodes;
另一方面,以下将起作用:
Node[] nodes = new Tile[10];
Tile[] tiles = (Tile[]) nodes;
您可以使用集合,例如:
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());
}
我目前有一个 Tile
class 扩展了 Node
class,我想像这样将一个节点数组向下转换为一个 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 是一个子class,这应该是从 Nodes 到 Tiles 的安全转换。
如果 Tile
是 Node
的子 class,则所有 Tile
都是 Node
,但 不是 所有 Node
个 Tile
个
因此将 Node[]
转换为 Tile[]
是错误的,因为 并非 所有 Node
数组都是 Tile
数组。
例如,以下将抛出 ClassCastException
:
Node[] nodes = new Node[10];
Tile[] tiles = (Tile[]) nodes;
另一方面,以下将起作用:
Node[] nodes = new Tile[10];
Tile[] tiles = (Tile[]) nodes;
您可以使用集合,例如:
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());
}