我正在尝试为自定义类实现比较器,以便我可以选择要排序的字段。我制作的一个比较课程给了我一个我一点也不懂的错误。我可以随意指出你看到的任何东西,因为我的老板周五早些时候就离开了,一旦我开始尝试对一系列的频谱进行排序,我就没有问他问题。下面代码中的对象:
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给出了相同的错误,但是因为它是多余的而被省略。
答案 0 :(得分:4)
这是错误的:
public class scanComparator<Spectrum> implements Comparator<Spectrum> {
应该是
public class ScanComparator implements Comparator<Spectrum> {
第一个<Spectrum>
不是类的名称,它是一个未绑定的类型变量,基本上等同于Object
,当然Object
没有这样的方法。此类型变量用于compare()
的参数类型。删除该无效规范将允许使用实际类型名称Spectrum
。
答案 1 :(得分: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;
}
}