Duvida em inserção de objetos na lista

7 respostas
arcZendSun

fala povo, bom sou iniciante no mundo java, estou começando a estudar e estou gostando muito.

bom estou mechendo com listas agora e pintou um erro que não entendi muito bem, eu criei um metodo chamado cadastrarImoveis() que cadastra na lista os imoveis de um determinado proprietario, sendo que o 1º ele cadastra tranquilo + quando vai cadastrar o segundo sempre da erro!, vejam o código:

classe Proprietario: "não vou colocar a classe toda"

package ex3;
import java.util.*;
import java.util.Set;
import java.util.Scanner;

public class Proprietario {
    private Integer id;
    private String nome;
    private Set<Imovel> imoveis = new TreeSet<Imovel>();
    
    public void cadastrarImoveis(){
        String op;

        Scanner scan = new Scanner(System.in);

       Imovel imovel = new Imovel();

       System.out.println("entre com o endereço da casa?");

       imovel.setEndereco(scan.nextLine());
       this.imoveis.add(imovel);

        System.out.println("Deseja inserir Imoveis? \"S\" para sim, para acabar entre com qualquer valor");
        op = scan.nextLine();

        if(op.equalsIgnoreCase("s")){
            this.cadastrarImoveis();
        }

    }
}
classe Imovel não tem nada de mais só os getters e setters

metodo main() na classe Main:

public static void main(String[] args) {

        String op;

        Proprietario proprietario = new Proprietario();
        Scanner scan = new Scanner(System.in);
        
        System.out.println("entre com o nome do Proprietario:");
        proprietario.setNome(scan.nextLine());

        proprietario.cadastrarImoveis();
        

    }

a menssagem exibida é essa:

[color=red]Exception in thread "main" java.lang.ClassCastException: ex3.Imovel cannot be cast to java.lang.Comparable
at java.util.TreeMap.put(TreeMap.java:542 )
at java.util.TreeSet.add(TreeSet.java:238 )
at ex3.Proprietario.cadastrarImoveis(Proprietario.java:32 )
at ex3.Proprietario.cadastrarImoveis(Proprietario.java:38 )
at ex3.Main.main(Main.java:16)
Java Result: 1[/color]

7 Respostas

luciano2

Cara eu não consegui ver qual é o erro , mas te dou um conselho não use recursividade para resolver esse problema. Quando eu chegar em casa dou uma olhada no código para ver onde está o erro.

luciano2

Cara eu dei uma olhada no código e vi que a exception ocorre porque o treeSet tenta fazer um cast para Comparable, logo eu fiz a classe imovel implementando Comparable e implementando o método compareTo, dessa forma o erro desaparece.

Bem aproveitando o gancho eu fiquei com uma dúvida, procurei na net mas não encontrei nada sobre o assunto.
Para inserir em um TreeSet é necessário que o objeto implemente Comparable?

arcZendSun

cara não sei, estou na 3ª aula de java e vi listas ontem!!!

luciano2

Blz! cara, mas de qualquer forma eu recomendo que você tire a recursividade do seu método e coloque esse loop principal em um while ou for no seu método main.
Por hora altere sua classe Imovel para que ela implemente Comparable.

Deixa essa pergunta no ar que alguem mais experiente nós responda, de qualquer forma vou pesquisar no livros para dar uma resposta definitiva

luciano@@:
Cara eu dei uma olhada no código e vi que a exception ocorre porque o treeSet tenta fazer um cast para Comparable, logo eu fiz a classe imovel implementando Comparable e implementando o método compareTo, dessa forma o erro desaparece.

Bem aproveitando o gancho eu fiquei com uma dúvida, procurei na net mas não encontrei nada sobre o assunto.
Para inserir em um TreeSet é necessário que o objeto implemente Comparable?

arcZendSun

blz, vou fazer só que não sei como fazer isso na classe imovel

arcZendSun

como se implementa o Comparable??

luciano2

Na verdade implementar é um conceito que está ligado a Interface, se você ainda não viu Interface em java(que não é interface gráfica) você verá em breve.

Interface é como se fosse uma classe totalmente abstrata, você não implementa os métodos apenas coloca as assinaturas deles, e as classes que implementam essa interface são obrigadas a implementarem os métodos definidos. Interface tem diversas funcionalidades que você vai aprender durante seu curso e com a experiência de trabalho.

para implementar a qualquer interface(não só a comparable) você deve usar a palavra reservada implements como no exemplo abaixo.

public class Imovel implements Comparable {

Se você estiver utilizando algum editor como eclipse ou netBeans assim que você digitar isso ele vai pedir para vc implementar os métodos de Comparable.

você deverá implementar o método compareTo, o método tem a seguinte assinatura

public int compareTo(Object o) {

Esse método é responsável por definir qual o critério para comparação de um objeto, no meu caso eu defini que imovel é igual se endereço é igual.

public int compareTo(Object o) { Imovel i = (Imovel) o; if(this.endereco.equals(i.endereco)){ return 0; } return 1; }

Criado 5 de julho de 2010
Ultima resposta 6 de jul. de 2010
Respostas 7
Participantes 2