-1

ソートするフィールドを選択できるように、カスタム クラスのコンパレータを実装しようとしています。私が作成した比較クラスの 1 つは、私が少しでも理解できないエラーを私に与えています。私の上司は金曜日に早く出発し、以下のコードで「Spectrum」オブジェクトの配列を並べ替えようとしたときに質問をすることができなかったので、あなたが見たものを自由に指摘してください:

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 に答える