2013-11-23 118 views
0

我想使自己的通用链表数据类型,但我有构造函数的问题,并得到类抛出异常。任何人都知道如何解决这个问题,为什么会发生这种情况?通用类构造函数在运行时抛出类抛出异常错误

这里是我的相关代码:

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; at abstractDataTypes.SinglyLinkedList。(SinglyLinkedList.java:23)

+3

类型的'新的对象[10]'是'Object []'。它不是'SinglyLinkedListNode []'。将对象转换为类型不会更改对象的类型。你不能把一辆汽车投给一只鸟,并且希望这辆汽车能够变成一只鸟。如果动物实际上是一只鸟,你可以将一只动物投给一只鸟。这就是说,为什么你需要一个链表中的节点数组?你知道链表是​​什么吗? –

回答

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