2

これを見てください:

私はソートセットを持っています:

SortedSet<Individual> individualSortedSet = new TreeSet<Individual>(new FitnessComparator()); 

これはコンパレータです:

import java.util.Comparator;

public class FitnessComparator implements Comparator<Individual> {
    @Override
    public int compare(Individual individual1, Individual individual2) {
        if (individual1.getFitness() == individual2.getFitness())
            return 0;
        return (individual1.getFitness() > individual2.getFitness())? 1 : -1;
    }
}

Individual クラスは単なるデータ クラスです。

ad 要素を sortedset に追加しようとすると:

individualSortedSet.add(individual);

次のランタイム エラーが発生します。

Exception in thread "main" java.lang.ClassCastException: Individual cannot be cast to java.lang.Comparable

理由が本当にわかりません。次のリンクを見ましたが、機能させることができません..

TreeSet に要素を追加するときに、クラス キャスト例外またはその他の何かが発生しないのはなぜですか?

リストから TreeSet への変換が生成されます:「java.lang.ClassCastException: MyClass を java.lang.Comparable にキャストできません」

4

1 に答える 1

1

コードには、次のように定義された別の sortedList がありました。

SortedSet<Individual> individualSortedSet = new TreeSet<Individual>(); 

私はそれを再度宣言したことを知りませんでした..これは正しい宣言です:

SortedSet<Individual> individualSortedSet = new TreeSet<Individual>(new FitnessComparator()); 
于 2013-11-14T08:48:29.247 に答える