2014-07-17 54 views
0

的通用比較我有一個容器對象是這樣的:更好的方式來寫容器

class Container<V> { 
    V value; 
} 

,並希望爲它編寫一個Comparator應該比較value只有當它的可比性。

我能想出的最好的是這樣的:

class ValueComparator<V extends Comparable<V>, C extends Container<V>> 
implements Comparator<C> { 

    @Override 
    public int compare(C o1, C o2) { 
     return o1.value.compareTo(o2.value); 
    } 

} 

可以以這種方式使用:

Container<String> x1, x2; 

    new ValueComparator<String,Container<String>>().compare(x1, x2); 
         ^^^^^^ ? 

的問題是:有沒有爲了實現這更好的辦法擺脫冗餘類型信息,以便我可以編寫:

new ValueComparator<Container<String>>().compare(x1, x2); 
+0

將你想要的行爲是如果V是沒有可比性? – Bohemian

+0

不要編譯。 – Scheintod

回答

3

您可以更改您的ValueComparator聲明是這樣的:

class ContainerComparator<V extends Comparable<V>> implements Comparator<Container<V>> { 
    @Override 
    public int compare(Container<V> o1, Container<V> o2) { 
     return ...; 
    } 
} 

現在,你可以用一個單一的類型參數聲明:

new ContainerComparator<String>().compare(x1, x2); 
+0

感謝您的回答。但這是錯誤的方向。 (基本容器是其他類的基類,在實際代碼中,我想使用類似ContainerComparator 而不是ContainerComparator ) – Scheintod