2015-04-17 70 views
1

this page引用,在提供方法,包括:ClassCastException異常的方法中提供

ClassCastException - 如果指定元素不能與在此優先級隊列中當前元素進行比較,根據所述優先級隊列的排序

這怎麼可能?我不能在這個方法中拋出classCastException。有人可以用這種方法拋出ClassCastException嗎?

+0

這聽起來像你正在混合什麼樣的對象,你試圖插入優先隊列。將您的代碼發佈到您呼叫的地方! – javajavajava

+0

@BarbiePylon OP詢問在哪種情況下會拋出異常,並引用文檔中提到的內容。 –

+1

啊,好吧,在這種情況下,答案@ Jean-FrançoisSavard提供的看起來不錯! – javajavajava

回答

3

只需在Queue中添加一些元素,例如String即可。

然後調用offer方法給出與Integer不兼容的字符串。

這個片斷:

public static void main(String args[]) 
{ 
    PriorityQueue test = new PriorityQueue(); 
    test.add("test"); 
    test.offer(new Integer(1)); 
} 

會產生這樣的錯誤:

Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer 
    at java.lang.Integer.compareTo(Integer.java:52) 
    at java.util.PriorityQueue.siftUpComparable(PriorityQueue.java:656) 
    at java.util.PriorityQueue.siftUp(PriorityQueue.java:647) 
    at java.util.PriorityQueue.offer(PriorityQueue.java:344) 
    at test.Test.main(Test.java:15) 

基本上,將引發異常,如果你提供了一個對象,它是不是與對象兼容已經在隊列。

+1

我很好理解。我們必須聲明非類型隊列。 PriorityQueue test = new PriorityQueue();不是優先()或任何類型。非常感謝你,你是親。 –

+0

@HalilReis它總是取決於你想要接受的。別客氣。 –