簡體   English   中英

類強制轉換異常和泛型(java)

[英]class cast exception and generics (java)

我正在實現自己的優先級隊列,並使用一個使用它的名為sportsball的類。 優先級隊列基於泛型,並使用Node(T對象,int值)(即玩家名稱及其分數)。 嘗試運行程序時出現類強制轉換異常錯誤。

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LPriorityQueue$Node;
    at PriorityQueue.<init>(PriorityQueue.java:35)
    at sportsball.main(sportsball.java:48) 

有問題的行是:PriorityQueue.java:35:

Node[] array = (Node[])(new Object[initialSize]);

sportsball.java:48:

PriorityQueue<String> queue = new PriorityQueue<String>(start, step);

謝謝您的幫助!

注意:

當我嘗試使用PriorityQueue.java:35行時:

Node[] array = new Node[initialSize];

錯誤:將彈出通用數組創建。

您不能將Object轉換為Node ,因此您不應將Object[] Node[]轉換為Node[] 只需直接創建Node[]

Node[] array = new Node[initialSize];

您不能像以前那樣將對象投射到節點上

Node[] array = (Node[])(new Object[initialSize]);

因此,出現了ClassCastException: [Ljava.lang.Object; cannot be cast to [LPriorityQueue$Node ClassCastException: [Ljava.lang.Object; cannot be cast to [LPriorityQueue$Node ,這很明顯對象無法ClassCastException: [Ljava.lang.Object; cannot be cast to [LPriorityQueue$Node為Node Type

所以你可以選擇這個選項

Node[] array = new Node[initialSize];

您不能簡單地將Object []強制轉換為Node []。 這確實會生成ClassCastException。 只需創建一個Node []即可( Node[] array = new Node[initialSize]; )。 沒有比這更多的代碼,我無話可說。

請注意,ClassCastException消息已經表明了問題。 [Ljava.lang.Object; 引用Object[] ,類似地, [LPriorityQueue$Node; Node[]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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