Почему мой список смежности дает мне исключение ClassCast? - PullRequest
1 голос
/ 24 октября 2019

Я создаю граф, используя список смежности. (через массив связанных списков). Он завершается с исключением приведения класса, когда я пытаюсь создать и упорядочить объект и привести его обратно к исходному типу (Обход универсальных массивов). Но когда я заменяю это необработанным типом, это работает. Почему это ?

public class Graph {

  int vertices;

  DoublyLinkedList<Integer>[] adjacencyList;

  public Graph(int vertices) {

    this.vertices = vertices;

    // Below line throws an error : Class Cast Exception 
    **adjacencyList = (DoublyLinkedList<Integer>[]) new Object[vertices];** /

    // Replace above line with this line and it works.
    **adjacencyList = new DoublyLinkedList[vertices];**

    for (int i = 0; i < vertices; i++) {
      adjacencyList[i] = new DoublyLinkedList<>();
    }
  }
}

public static void main(String[] args) {

    Graph graph = new Graph(3);
    graph.addEdge(0, 1);
    graph.addEdge(1, 2);
    graph.addEdge(2, 0);
}

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Вы пытаетесь привести Object к DoublyLinkedList<Integer>[], но Object не является экземпляром DoublyLinkedList<Integer>[]. Вместо этого вы можете изменить

new Object[vertices];

на

new DoublyLinkedList[vertices];

, но, как видите, вы потеряете свой тип (вы не можете создатьмассив обобщенных классов с типами для дополнительной информации проверьте: официальный учебник ).

0 голосов
/ 24 октября 2019

Вы не можете по той же причине, по которой вы не можете делать что-то вроде

Object objArray = new String();
String strArray = ((String)new Object());

Другими словами, каждый класс является объектом, но не все объекты являются строками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...