2014-07-24 73 views
4

內爲什麼我要在靜態字段列表完全限定java.lang.String中不能用靜態列表<String>比較<String>

public static class MyComparator<String> implements Comparator<String> { 

     public static List sortOrder; 
     public static List<Integer> sortOrder2; 
     public static List<java.lang.String> sortOrder3; // works! 
     public static List<String> sortOrder4; // <-Compiler error only in this line 


     @Override 
     public int compare(String s1, String s2) { 

      // TODO 

      return -1; 
     } 
    } 

錯誤是「不能讓一個靜態引用非靜態類型爲String 「

回答

2

替換:

public static class MyComparator<String> implements Comparator<String> 

其他一些與衆不同的名字:

public static class MyComparator<S> implements Comparator<String> 
+0

但shoudl是什麼'S'的目的,當它應該比較'String's比較是比較兩個java.lang.String中的對象,在一個SortedMap – AlexWien

+2

使用? – rgettman

+1

它沒有任何目的,那就是解決方案。 – AlexWien

13

您已經定義了一個泛型類型參數String,它與該類的名稱相同,因此String引用您的參數,而java.lang.String仍然有效。

將它從班級中移除,但保留在implements子句中。

public static class MyComparator implements Comparator<String> { 
+0

完美,幫助 – AlexWien