пытаются найти прямой ответ/решение для этого в течение последних 3-х часов без удачи, надеясь, что вы, ребята могут помочь:Дженерик и понижающее приведение (Java)
У меня есть следующие классы, которые реализуют дерево интервала, используя бинарное дерево поиска:
public class Node<T extends Comparable<T>> implements Comparable<Node<T>> {...}
public class BinarySearchTree<T extends Comparable<T>> {
protected Node<T> root;
...}
public class IntervalNode extends Node<Interval> {...}
public class IntervalTree extends BinarySearchTree<Interval> {...}
При попытке следующий бросок на корневом элементе экземпляра IntervalTree я получаю ClassCastException:
IntervalNode CurrentNode = (IntervalNode)root; //root being of type Node<Interval>
which IntervalNode extends.
Я довольно новый в java, но из того, что я прочитал и googled, это понижение должно быть возможным, поэтому я немного потерял причину этого исключения. До сих пор я догадываюсь, что это вызвано стиранием типа, но я не смог найти прямой ответ на этот вопрос. Любые идеи относительно причины этого исключения или еще лучше обходного пути?
из вашего кода, каждый 'IntervalNode' является' Node', но 'Node' может быть' IntervalNode' (не каждый). Когда вы вставляете элемент в свое дерево, он будет 'Node', может быть, делать что-то вроде' if (root == null) root = new Node(); 'если это так, тогда ваш тип кастинг будет всегда недействительным. –