在过去,我已经能够实现一个通用的ArrayList铸造对象[]以E []:ClassCastException异常铸造对象[]以Trie.Node <V>而不是E []
public class ArrayList<E>
{
private E[] elements;
@SuppressWarnings("unchecked")
public ArrayList()
{
elements = (E[])new Object[16];
}
}
我可以正常使用一般的阵列,像这样:
public void add(E element)
{
...
elements[size++] = element;
}
我想我可以实现类似的特里树:
public class Trie<V>
{
private static class Node<V>
{
public V value;
@SuppressWarnings("unchecked")
public Node<V>[] next = (Node<V>[])new Object[26];
}
private Node<V> root = new Node<V>();
}
然而,在Trie.Node行public Node<V>[] next = (Node<V>[])new Object[26];
导致一个ClassCastException:
public class Main
{
public static void main(String[] args)
{
ArrayList<Integer> a = new ArrayList<Integer>();
Trie<Integer> t = new Trie<Integer>();
}
}
java Main
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LTrie$Node;
at Trie$Node.<init>(Trie.java:6)
at Trie$Node.<init>(Trie.java:3)
at Trie.<init>(Trie.java:10)
at Main.main(Main.java:6)
所以它说我不能投的对象[]以Trie.Node []。
从Object []投射到E []和从Object []投射到Trie.Node <V> []是什么区别?为什么前者是允许的,而不是后者?
请提高你接受的评价! – manub