Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Não consegui resolver

Não consegui resolver o exercício.. Alguém pode colocar ele resolvido por favor?

3 respostas

Ola Vanessa.

A ideia é que a coleção TreeSet ela só aceita objetos que seja Comparator. Como o Recibo não é, então não é aceito no metodo add do TreeSet. Tente implementar essa interface na classe Recibo, adicionar a regra de comparação.

Você teria um trecho do código pra gente analisar?

package br.com.alura;
import java.util.Set;
import java.util.TreeSet;

    public class Recibo implements Comparable<Recibo> {

           public static void main(String [] args) {

               Recibo rec1 = new Recibo();
               Recibo rec2 = new Recibo();
               Recibo rec3 = new Recibo();

                 Set<Recibo> recibos = new TreeSet<Recibo>();
                 recibos.add(rec1);
                 recibos.add(rec2);
                 recibos.add(rec3);

                 for (Recibo teste : recibos) {
                        System.out.println(teste);
                 }
           }

        @Override
        public int compareTo(Recibo o) {
            return 0;

        }

    }

O console imprime: br.com.alura.Recibo@2f0e140b

Se eu retirar a implementaçao de Compaarable e o método compareTo:

package br.com.alura;
import java.util.Set;
import java.util.TreeSet;

    public class Recibo /*implements Comparable<Recibo> */{

           public static void main(String [] args) {

               Recibo rec1 = new Recibo();
               Recibo rec2 = new Recibo();
               Recibo rec3 = new Recibo();

                 Set<Recibo> recibos = new TreeSet<Recibo>();
                 recibos.add(rec1);
                 recibos.add(rec2);
                 recibos.add(rec3);

                 for (Recibo teste : recibos) {
                        System.out.println(teste);
                 }
           }

//        @Override
//        public int compareTo(Recibo o) {
//            return 0;

//        }

    }

Explode a exception:

Exception in thread "main" java.lang.ClassCastException: class br.com.alura.Recibo cannot be cast to class java.lang.Comparable (br.com.alura.Recibo is in unnamed module of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap') at java.base/java.util.TreeMap.compare(TreeMap.java:1291) at java.base/java.util.TreeMap.put(TreeMap.java:536) at java.base/java.util.TreeSet.add(TreeSet.java:255) at br.com.alura.Recibo.main(Recibo.java:14)

solução!

Ola Vanessa, o comportamento é este mesmo, para usar TreeSet com um objeto, ele deve implementar Comparable, e caso não, ocorre este erro que você mencionou.