2010-12-10 34 views
1

我想構造ImmutableSortedSet。我寫的代碼SMT,如:構造不帶警告的ImmutableSortedSet

Set<String> obj = new HashSet<String>(); 
Comparator<String> myComparator = new Comparator<String>(){ 
    @Override 
    public int compare(String o1, String o2) { 
     return 0; 
    }   
}; 
Set<String> ordered = ImmutableSortedSet.copyOf(obj) 
    .orderedBy(myComparator).build(); 

,但它產生的警告:

從 型ImmutableSortedSet靜態方法 orderedBy(比較)應 以靜態方式

訪問

如何在不使用@SuppressWarnings("static-access")的情況下刪除此警告?謝謝。

+0

哎呀!有誰知道,javac和eclipse都會給出這個警告嗎? (請說是。) – 2010-12-15 22:55:47

+0

@Kevin Bourrillion,eclipse做。但我的javac沒有。 – 2010-12-16 09:09:03

回答

4

這是給你的警告,因爲orderedBy是一種靜態方法,你打電話給它的實例ImmutableSortedSet。這通常意味着當你真的在做別的事情時,你認爲你正在做一件事情,這就是這種情況。

的結果是,這個代碼是不會做你認爲它......它要扔掉通過copyOf(obj)創建的ImmutableSortedSet(它只是被用來訪問靜態方法orderedBy,其可以用於直接)並返回一個空集,就好像您剛剛稱爲ImmutableSortedSet.orderedBy(myComparator).build()

這裏是你想做的事(如R. Bemrose說):

ImmutableSortedSet<String> ordered = ImmutableSortedSet.copyOf(myComparator, obj); 

爲子孫後代,這就是我急忙最初發布時(它具有相同的結果):

ImmutableSortedSet<String> ordered = ImmutableSortedSet.orderedBy(myComparator) 
    .addAll(obj).build(); 
+0

非常感謝。 5分鐘後我會接受這個答案。 – 2010-12-10 16:17:13

+2

警告搖滾! :-) – 2010-12-10 16:22:44

3

後看着番石榴ImmutableSortedSet文檔,看起來你實際上想要其中一個重載到copyOf

具體來說,你想要的copyOf(Comparator, Collection)過載:

Set<String> ordered = ImmutableSortedSet.copyOf(myComparator, obj); 
+0

謝謝。我會照你說的去做。但是我保證聲明@ ColinD的答案( – 2010-12-10 16:19:26

+0

)你是對的,這種方法是正確的,可以用於作者想做的事情,儘管最終的結果是一樣的。 – ColinD 2010-12-10 16:31:32