通用类构造函数在运行时失败并出现类转换异常错误

时间:2013-11-23 13:35:30

标签: java generics

我正在尝试创建自己的通用链表数据类型,但是我遇到了构造函数问题并且遇到了类转换异常。任何人都知道如何解决这个问题以及为什么会发生这种情况?

以下是我的相关代码:

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)

1 个答案:

答案 0 :(得分:2)

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