簡體   English   中英

無法在Java中創建泛型類的對象數組

[英]Can't create a Object Array of Generic Class in Java

在Node Class構造函數中,我試圖初始化childArraydataArray ,它們是基於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM