2012-07-15 74 views
-1

我試圖實現一個自定義類的比較器,所以我可以選擇排序的字段。我做的一個比較類是給我一個我不明白的錯誤。請隨時指出您所看到的任何內容,因爲我的老闆在星期五早些時候離開,並且在我開始嘗試對以下代碼中的「Spectrum」對象進行排序時,我沒有問他問題:Java比較器類型變量問題?

import java.io.*; 
import java.util.*; 

public class scanComparator<Spectrum> implements Comparator<Spectrum> { 
    public int compare(Spectrum o1, Spectrum o2){ 
     int s1 = o1.getScanNumber(); 
     int s2 = o2.getScanNumber(); 
     int eval = s2 - s1; 
     return eval; 
    } 
} 

這是錯誤(從jGrasp):

scanComparator.java:7: error: cannot find symbol 
     int s2 = o2.getScanNumber(); 
       ^
    symbol: method getScanNumber() 
    location: variable o2 of type Spectrum 
    where Spectrum is a type-variable: 
    Spectrum extends Object declared in class scanComparator 

getScanNumber()是公開的,不要錯過拼寫。我從Spectrum類複製粘貼方法名稱。給出了o1的同樣的錯誤,但是因爲冗餘而忽略了。

+2

這似乎是最可能的爆炸,但奇怪的是,它不會指出o1相同。 – 2012-07-15 21:31:29

+1

'getScanNumber()'是公共的嗎? – Starkey 2012-07-15 21:33:02

+0

抱歉,應該指定這些點生病編輯... – user1487166 2012-07-15 21:39:09

回答

3

你的問題是你聲明scanComparator<Spectrum>,只需將其更改爲'scanComparator'如下,一切順利。

import java.io.*; 
import java.util.*; 

public class scanComparator implements Comparator<Spectrum> { 
    public int compare(Spectrum o1, Spectrum o2){ 
     int s1 = o1.getScanNumber(); 
     int s2 = o2.getScanNumber(); 
     int eval = s2 - s1; 
     return eval; 
    } 
} 
+0

如何回合。我以爲我爲其他比較者做了同樣的事情,但現在我查看了我的代碼,但是我沒有。敏銳的觀察,謝謝 – user1487166 2012-07-15 21:42:18

+0

這是一個痛苦的詳細的方式來編寫'返回o1.getScanNumber() - o2.getScanNumber();'。 – seh 2012-07-15 21:48:17

4

這是錯誤的:

public class scanComparator<Spectrum> implements Comparator<Spectrum> { 

應該是

public class ScanComparator implements Comparator<Spectrum> { 

第一<Spectrum>不是類的名稱,它是一個未綁定類型的變量,基本上等同於Object,當然Object沒有這樣的方法。這個類型變量被用於compare()的參數類型。刪除該無效規範將允許使用真實類型名稱Spectrum