【问题标题】:Why am I getting a class cast exception if I have implemented comparator?如果我实现了比较器,为什么会出现类转换异常?
【发布时间】:2013-11-14 16:55:51
【问题描述】:

请看这个:

我有一个排序集:

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 类只是一个数据类。

当我尝试将广告元素添加到排序集时:

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"

【问题讨论】:

  • 你从哪一行得到异常?
  • @Kayaman 根据他的问题 - 在individualSortedSet.add(individual);
  • 万一,你有没有其他Individual类在这里混在一起?
  • 我刚刚意识到我使用的是不同的 SortedSet,并且没有添加“新的 FitnessComparator()”。 Intellij 将其更改为 而我没听懂!谢谢!它已修复 - 现在正在查看另一个错误:-/
  • 对不起,下次我会仔细看看异常在哪一行..

标签: java classcastexception comparator sortedset


【解决方案1】:

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

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

我没看到我又声明了..这是正确的声明:

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

【讨论】:

    猜你喜欢
    • 2012-09-21
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多