-1

我试图为自定义类实现比较器,以便我可以选择要排序的字段。我做的比较器类之一给了我一个我一点也不理解的错误。随意指出你看到的任何东西,因为我的老板周五早些时候离开了,一旦我开始尝试对下面代码中的“光谱”对象数组进行排序,我就没有机会问他问题:

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 给出了相同的错误,但由于其冗余而被省略。

4

2 回答 2

4

这是错误的:

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

应该

public class ScanComparator implements Comparator<Spectrum> {

第一个<Spectrum>不是类名,是一个未绑定的类型变量,基本等价于Object,当然Object也没有这个方法。这个类型变量被用于参数的类型compare()。删除该无效规范将允许使用真实类型名称Spectrum

于 2012-07-15T21:38:49.213 回答
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;
    }
}
于 2012-07-15T21:40:00.197 回答