1
resposta

Dúvida segunda aula de Java collections

O método sort() não compila na classe TesteDeAula, mesmo tendo realizado todos os procedimentos, sobreescrito os metodos de forma correta, parei na aula no momento 14:21 e mesmo assim não compila! A sugestão do eclipse é mudar o nome sort(), apenas isso.

Código da classe Aula

package br.com.alura;

public class Aula implements Comparable { private String titulo; private int tempo;

public Aula(String titulo, int tempo) { this.titulo = titulo; this.tempo = tempo; }

public String getTitulo() { return titulo; }

public int getTempo() { return tempo; }

@Override public String toString(){ return "Aula:"+this.titulo+", "+this.tempo+" minutos"; }

@Override public int compareTo(Aula outraAula) { return this.titulo.compareTo(outraAula.titulo); }

}

Código da classe TestaListaDeAula

package br.com.alura;

import java.util.ArrayList;

import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils.Collections;

public class TestaListaDeAula {

public static void main(String[] args) { Aula aula1 = new Aula("Revisando as arrays list", 21); Aula aula2 = new Aula("Trabalhando com listas de objetos", 15); Aula aula3 = new Aula("Relacionamento de listas e objetos", 15);

ArrayList aulas = new ArrayList<>(); aulas.add(aula1); aulas.add(aula2); aulas.add(aula3); System.out.println(aulas);

Collections.sort(aulas); }

}

1 resposta

Olá, João!

Copiei seu código para o meu eclipse e encontrei os seguintes warnings e erros.

1 - A classe Collections não está sendo corretamente importada no arquivo da classe TestaListaDeAula.

Troque:

import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils.Collections;

Por:

import java.util.Collections;

2 - Não utilize classes que utilizam Generics como rawtypes (sem especificar o tipo de classe usada no Generics) , assim como você fez no método main da classe TesteListaDeAula.

Troque:

ArrayList aulas = new ArrayList<>();

Por:

ArrayList<Aula> aulas = new ArrayList<>();

ou melhor ainda

ArrayList<Aula> aulas = new ArrayList<Aula>();

Busque sempre utilizar dessa segunda forma, para nunca esquecer de passar o argumento (tipo de classe) para um classe que utilize Generics.

3 - Há um terceiro problema encontrado na classe Aula pelo mesmo motivo que acabei de citar. Sua classe está implementado a interface Comparable sem o argumento do Generics.

Como você declarou a implementação de Comparable da seguinte forma:

public class Aula implements Comparable { ...

O método que deveria ser sobrescrito é:

@Override
    public int compareTo(Object o) { ...
    }

e não:

@Override
    public int compareTo(Aula outraAula) { ....

Entenda que a assinatura do método compareTo da interface Comparable é

// <acesso> <retorno> <nome> ( <tipo_do_argumento> <nome_do_argumento>)
public int compareTo(Object o)

Obs: não há problemas se você alterar o(s) nome(s) do(s) argumento(s) do método

Para resolver essa situação, basta passar o argumento para interface Comparable para explicitar que o método compareTo deve receber um tipo Aula.

public class Aula implements Comparable<Aula> {...

Espero ter sido claro na minha explicação. Quaisquer outras dúvidas, pode falar!