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