2012-07-15 68 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