如果我实现了比较器,为什么会出现类强制转换异常?

时间:2013-11-14 08:31:33

标签: java classcastexception comparator sortedset

请看一下:

我有一个排序集:

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 element添加到sortedset时:

individualSortedSet.add(individual);

我收到以下运行时错误:

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

我真的不明白为什么。我查看了以下链接,但我无法使其正常工作..

Why I'm not getting a class cast exception or some thing else when adding element to TreeSet

List to TreeSet conversion produces: "java.lang.ClassCastException: MyClass cannot be cast to java.lang.Comparable"

1 个答案:

答案 0 :(得分:1)

代码中有一个不同的sortedList,定义如下:

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

我没有看到我再次宣布它。这是正确的声明:

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