2011-02-18 60 views
1

如何創建與像嵌套泛型參數MinMaxPriorityQueue如何使用嵌套泛型參數創建MinMaxPriorityQueue?

MinMaxPriorityQueue<AtomicCountHolder<E>> sortedHeap; 

我已經試過各種我能與靜態create()方法想到的變化,和建造無濟於事。它適用於

MinMaxPriorityQueue<Integer> s = MinMaxPriorityQueue. <Integer>create(); 

但不適用於嵌套泛型。任何線索都會有幫助。

回答

7

MinMaxPriorityQueue.create()強制規定泛型類型必須實現接口,即存在該類型實例的自然排序。

我假設AtomicCountHolder<E>沒有實現Comparable。在這種情況下,您必須提供定義Comparator的定義您的類型的順序。例如,

MinMaxPriorityQueue<AtomicCountHolder<E>> sortedHeap = MinMaxPriorityQueue.orderedBy(Ordering.natural().onResultOf(someFunction)).create(); 

這裏假設你有一個Function這需要AtomicCountHolder<E>和返回的東西是Comparable,像一個Integer。假設E具有可比性,那麼您可以編寫一個Function,它需要AtomicCountHolder<E extends Comparable<? super E>>並返回AtomicCountHolder所指的任何內容。

什麼是AtomicCountHolder btw?它是否像AtomicInteger

+0

AtomicCountHolder extends AtomicInteger 所以它應該實現Comparable。 – 2011-02-18 19:49:58

+1

@ Hein:`AtomicInteger`不是`Comparable`。 – ColinD 2011-02-18 20:16:41

0

編輯:@ sjr的答案是正確的,然後 - 你的AtomicCountHolder<E>類需要實現Comparable<AtomicCountHolder<E>>。順便說一下,AtomicInteger沒有實現Comparable<AtomicInteger>


此外,E需要是一個聲明類型。你要麼需要使用一個名爲E的參數類型定義在類優先級隊列:

public class Example<E> { 
    MinMaxPriorityQueue<AtomicCountHolder<E>> sortedHeap = 
     MinMaxPriorityQueue.create(); 
} 

...或者你需要指定它的位置現有類型:

MinMaxPriorityQueue<AtomicCountHolder<Integer>> sortedHeap = 
    MinMaxPriorityQueue.create(); 

你也可以使用通配符,你通常會在其他地方(假設有參數類型的AtomicCountHolder沒有任何限制):

MinMaxPriorityQueue<AtomicCountHolder<?>> sortedHeap = 
    MinMaxPriorityQueue.create(); 
0

注意MinMaxPriorityQueue假設它的元素不會改變它們的順序。如果AtomicCountHolder類是可變的,顧名思義,你可能會有不正確的行爲。