我正在尝试创建自己的通用链表数据类型,但是在构造函数方面遇到了麻烦,并且遇到了类强制转换异常。有人知道如何解决此问题,为什么会这样?

这是我的相关代码:

public class SinglyLinkedList<E> {

   private LinkedListNode<E>[] linkedListNodeList;

   public SinglyLinkedList()
   {
       linkedListNodeList = (SinglyLinkedListNode<E>[]) new Object[10];
   }

}


令人讨厌的行是构造函数中的实现行。

这是我的SinglyLinkedListNode类:

public class SinglyLinkedListNode<E> extends LinkedListNode<E>{

   private E data;

   public SinglyLinkedListNode(E data)
   {
       this.data = data;
   }
}


我的LinkedListNode类只是SinglyLinkedListNode扩展的一个空(现在)抽象类。

这是我收到的编译器错误:

java.lang.ClassCastException:[Ljava.lang.Object;无法转换为[LabstractDataTypes.SinglyLinkedListNode;
    在abstractDataTypes.SinglyLinkedList处。(SinglyLinkedList.java:23)

最佳答案

Object[]与任何其他阵列(例如String[])不兼容。但这将起作用:

public class SinglyLinkedList<E> {

   private LinkedListNode<E>[] linkedListNodeList;

   public SinglyLinkedList()
   {
       linkedListNodeList = (SinglyLinkedListNode<E>[]) new SinglyLinkedListNode<?>[10];
   }
}


请注意,也无法使用new SinglyLinkedListNode<E>[10],因为一般无法创建通用数组:

E[] myArray = new E[10]; // doesn't work, if E is a generic type parameter

09-25 22:02