2013-03-11 127 views
0

這是我使用的比較:爲什麼這個字符串比較器不能編譯?

import java.util.Comparator; 

public class StringComparator implements Comparator 
{ 
    public int compare(String obj1, String obj2) 
    { 
     String delimeter = " "; 
     String nameSplit1[] = obj1.split(delimeter); 
     String nameSplit2[] = obj2.split(delimeter); 

     return nameSplit1[1].compareTo(nameSplit2[1]); 
    } 
} 

這是主文件:

import java.util.*; 

public class StringCompare 
{ 
    public static void main(String args[]) 
    { 
     List<String> stringList = new ArrayList<String>(); 
     String delimeter = " "; 

     stringList.add("Seven Clocks"); 
     stringList.add("Twelve Beds"); 
     stringList.add("Eight Frogs"); 


     Collections.sort(stringList, new StringComparator()); 

     for (String a : stringList) 
     { 
      System.out.println(a); 
     } 
    } 
} 

我基本上是試圖所以根據該collections.sort各式各樣的人組成一個比較第二個字,不是第一個。但是當我編譯它時,我所得到的就是StringComparator不會覆蓋抽象方法compare(Object,Object)的錯誤。爲什麼它給了我這個錯誤?...

+0

你應該使用泛型。 – SLaks 2013-03-11 21:59:32

+0

'比較(字符串,字符串)'不覆蓋'比較(對象,對象)'這是一個非泛型'比較器'的預期比較方法 – 2013-03-11 22:01:48

+0

較早的rawtypes警告(假設JDK 7)應該讓遊戲離開。而@ @ Override會有所幫助。 – 2013-03-11 22:01:53

回答

3

因爲比較是一個通用的接口,因爲你沒有定義它是一個Comparator<String>它倒在最一般的定義,Comparator<Object>這意味着參數應Objects而不是Strings

將其更改爲

public class StringComparator implements Comparator<String> { 

,它應該編譯就好了。

6

您從比較器聲明中省略了泛型參數。

public class StringComparator implements Comparator<String> 
//             ^
//    you need this!      | 
// ---------------------------------------------------- 
相關問題