Java比较器类型变量问题?

时间:2012-07-15 21:26:18

标签: java comparator

我正在尝试为自定义类实现比较器,以便我可以选择要排序的字段。我制作的一个比较课程给了我一个我一点也不懂的错误。我可以随意指出你看到的任何东西,因为我的老板周五早些时候就离开了,一旦我开始尝试对一系列的频谱进行排序,我就没有问他问题。下面代码中的对象:

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 个答案:

答案 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;
    }
}