在過去,我已經能夠實現一個通用的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