我正在尝试创建自己的通用链表数据类型,但是我遇到了构造函数问题并且遇到了类转换异常。任何人都知道如何解决这个问题以及为什么会发生这种情况?
以下是我的相关代码:
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)
答案 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