[英]Can't create a Object Array of Generic Class in Java
在Node Class構造函數中,我試圖初始化childArray
和dataArray
,它們是基於Generic類本身的對象。
private class Node<type extends Comparable<type>> {
public Node<type>[] childArray;
public DataItem<type>[] dataArray;
public int dataCount; //No. of data elements in the node
public int childCount; //No. of child elements under it
public Node<type> parent;
private static final int ORDER = 4;
public Node() {
childArray = (Node<type>[]) new Object[ORDER];
dataArray = (DataItem<type>[]) new Object[ORDER - 1];
dataCount = 0;
childCount = 0;
}
}
嘗試編譯時出現以下錯誤:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LTree234$Node;
at Tree234$Node.<init>(Tree234.java:37)
at Tree234.<init>(Tree234.java:149)
at Tree234.main(Tree234.java:266)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
完整的代碼可以在以下位置找到: https : //gist.github.com/stirredo/2a40d48021a8b9e14959
我該如何克服這個問題?
我知道有很多問題,但我的問題除外,但我無法將其應用於我的問題。
您正在嘗試將Object[]
Node[]
轉換為Node[]
而Object[]
從未成為Node[]
。 大概是因為在編譯時childArray = new Object[ORDER]
為您提供了incompatible types
,所以childArray = new Object[ORDER]
。 類似地, ClassCastException
是由於兩者未能在運行時解析為“兼容”狀態所致。
因此,您希望它是childArray = new Node<T>[ORDER];
這也是不可能的 。 簡而言之,您應該使用某種形式的Collection
class Node<T extends Comparable<T>> {
private Collection<Node<T>> children;
}
childArray = (Node<type>[])new Node[ORDER];
要么
childArray = (Node<type>[])new Node<?>[ORDER];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.