2012-05-17 8 views
1

다음 코드는 컴파일을 통과하는 데 적합합니다. PriorityQueue를 정의하여 Comparable의 instanceof 요소 만 가져올 수있는 이유는 무엇입니까?왜 priorityQueue에 컴파일 타임에 비교 가능한 인터페이스가 필요하지 않습니까?

... 
PriorityQueue<Object> q = new PriorityQueue<Object>(); 
q.add(new Object()); 
... 

하지만 예상 예외를 throw : 당신은 당신이 Comparator를 제공하는만큼 Comparable, 를 구현하지 않는 객체를 저장할 수있는

Exception in thread "main" java.lang.ClassCastException: java.lang.Object cannot be cast  to java.lang.Comparable 
    at java.util.PriorityQueue.siftUpComparable(PriorityQueue.java:595) 
    at java.util.PriorityQueue.siftUp(PriorityQueue.java:591) 
    at java.util.PriorityQueue.offer(PriorityQueue.java:291) 
    at java.util.PriorityQueue.add(PriorityQueue.java:268) 
    at ReentrantLockExample.main(ReentrantLockExample.java:12) 

답변

관련 문제