Как уменьшить массив в Java? - PullRequest
0 голосов
/ 27 мая 2018

В настоящее время у меня есть класс Tile, который расширяет класс Node, и я хочу преобразовать массив узлов в массив плиток следующим образом:

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 является подклассом, это должно быть безопасное приведение от узлов к плиткам.

Ответы [ 2 ]

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

Вы можете использовать коллекцию, например что-то вроде:

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());
}
0 голосов
/ 27 мая 2018

Если Tile является подклассом Node, все Tile sa Node s, но not all 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;
...