Почему я получаю исключение приведения класса, если я реализовал компаратор?

Пожалуйста, взгляните на это:

У меня есть сортированный набор:

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

Я действительно не понимаю почему. Я просмотрел следующие ссылки, но не могу заставить их работать ..

Почему я я не получаю исключение приведения класса или что-то еще при добавлении элемента в TreeSet

Преобразование списка в TreeSet производит: java.lang.ClassCastException: MyClass нельзя преобразовать в java.lang.Comparable


person MTA    schedule 14.11.2013    source источник
comment
Из какой строки вы получаете исключение?   -  person Kayaman    schedule 14.11.2013
comment
@Kayaman по его вопросу - в individualSortedSet.add(individual);   -  person Benjamin Gruenbaum    schedule 14.11.2013
comment
Может быть, у вас тут замешан какой-нибудь другой Individual класс?   -  person Rohit Jain    schedule 14.11.2013
comment
Я только что понял, что использую другой SortedSet и не добавил «новый FitnessComparator ()». Intellij меняет его на ‹~›, и я этого не уловил! Спасибо! это исправлено - теперь смотрю на другую ошибку: - /   -  person MTA    schedule 14.11.2013
comment
Извините, в следующий раз я более подробно рассмотрю, на какой строке исключение ..   -  person MTA    schedule 14.11.2013
comment
Вы можете просто сравнить метод: return individual2.getFitness() - individual2.getFitness()   -  person Areo    schedule 14.11.2013
comment
Вы действительно уверены, что использовали new TreeSet<Individual>(new FitnessComparator());, и new TreeSet<Individual>() (без компаратора) не задействован?   -  person Holger    schedule 14.11.2013
comment
@Holger, да, вот в чем проблема!   -  person MTA    schedule 14.11.2013
comment
Я думаю, мне нужно начать более четко называть свои переменные, но мне трудно придумать хорошие имена   -  person MTA    schedule 14.11.2013


Ответы (1)


В коде был другой sortedList, который был определен следующим образом:

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

Я не видел, чтобы я объявил это снова .. Это правильное объявление:

SortedSet<Individual> individualSortedSet = new TreeSet<Individual>(new FitnessComparator()); 
person MTA    schedule 14.11.2013