Questão do Simulado Inquisition

2 respostas
luistiagos
class test2 implements Comparator < test2 >
{
   int testNumber;
   public static void main( String args[] )
   {
      Set < test2 > s1 = new TreeSet < test2 > ();
      
      test2 t1 = new test2();
      test2 t2 = new test2();
      
      t2.testNumber = 4;
      t1.testNumber = 6;
      
      s1.add(t1);
      s1.add(t2);

   }
   public int compare( test2 t1 , test2 t2 )
   {
      return t1.testNumber - t2.testNumber;
   }

}

entre diversas opções uma esta correta… lança ClassCastException pq?

2 Respostas

gomesrod

Olá,

Como você construiu o TreeSet usando o construtor sem argumentos, todos os objetos inseridos devem ser comparáveis entre si através da implementação da interface Comparable.

A pegadinha é que test2 implementa Comparator ao invés de Comparable. Ocorre ClassCastException porquê internamente o TreeSet tenta atribuir seu objeto a uma referência do tipo Comparable.

Para funcionar, basta trocar a linha

por

Assim seu TreeSet possui um Comparador e não precisa mais que os elementos implementem Comparable.

PS: Eu nunca teria acertado essa, só pesquisei porque você já tinha colocado a resposta :slight_smile:

R

gomesrod:
Olá,

Como você construiu o TreeSet usando o construtor sem argumentos, todos os objetos inseridos devem ser comparáveis entre si através da implementação da interface Comparable.

A pegadinha é que test2 implementa Comparator ao invés de Comparable. Ocorre ClassCastException porquê internamente o TreeSet tenta atribuir seu objeto a uma referência do tipo Comparable.

Para funcionar, basta trocar a linha

por

Assim seu TreeSet possui um Comparador e não precisa mais que os elementos implementem Comparable.

PS: Eu nunca teria acertado essa, só pesquisei porque você já tinha colocado a resposta :)

Inquisition é o rei das pegadinhas :stuck_out_tongue:
Apesar que dizem que ele fica um pouco longe do que a prova pede, mas eu gostei bastante.

Criado 30 de julho de 2008
Ultima resposta 31 de jul. de 2008
Respostas 2
Participantes 3