Onde estaria o erro? (Cast)

12 respostas
A

Pessoal, estou tentando fazer este casting aí embaixo mas tah dando erro de ClassCastException… alguem poderia me ajudar?

Pessoa pessoaTmp = (Pessoa) pessoas.get(pessoasJList.getSelectedIndex());
        Advogado advogado = (Advogado) pessoaTmp;
        advogado.setOab(oabJText.getText());
package br.com.solucoesideais.admOffice.beans;

import java.util.List;
import java.util.Set;
import java.util.HashSet;

public class Pessoa {

    private Long id;
    private String nome;
    private Set telefones = new HashSet();
    private Set enderecos = new HashSet();
    private Set  emails = new HashSet();
    
    public Pessoa() {
        
    }

    public Long getId() {        
        return id;
    } 

    public void setId(Long id) {        
        this.id = id;
    } 

    public String getNome() {        
        return nome;
    } 

    public void setNome(String nome) {        
        this.nome = nome;
    } 

    public java.util.Set getEnderecos() {
        return enderecos;
    }

    public void addEndereco(Endereco endereco) {
        endereco.setPessoa(this);
//        if (! this.enderecos.contains(endereco)) {
            this.enderecos.add(endereco);
//        }
    }

    public void removeEndereco(Endereco endereco) {
        boolean removed = this.enderecos.remove(endereco);
    }

    public void setEnderecos(Set enderecos) {
        this.enderecos = enderecos;
    }

    public java.util.Set getTelefones() {
        return telefones;
    }

    public void setTelefones(Set telefones) {
        this.telefones = telefones;
    }

    public void addTelefone(Telefone telefone) {
        telefone.setPessoa(this);
        if (! this.telefones.contains(telefone)) {
            this.telefones.add(telefone);
        }
    }

    public void removeTelefone(Telefone telefone) {
        boolean removed = this.telefones.remove(telefone);
    }

    public java.util.Set getEmails() {
        return emails;
    }

    public void setEmails(Set emails) {
        this.emails = emails;
    }

    public void addEmail(Email email) {
        email.setPessoa(this);
        if (! this.emails.contains(email)) {
            this.emails.add(email);
        }
    }

    public void removeEmail(Email email) {
        boolean removed = this.emails.remove(email);
    }
 }
/*
 * Advogado.java
 *
 * Created on 8 de Junho de 2005, 09:16
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */

package br.com.solucoesideais.admOffice.beans;

/**
 *
 * @author André Tapxure
 */
public class Advogado extends Pessoa {
    
    private String oab;
    
    public Advogado() {
        super();
    }
    
    public String getOab() {
        return oab;
    }
    
    public void setOab(String oab) {
        this.oab = oab;
    }

}

[b]

12 Respostas

jgbt
Advogado advogado = (Advogado) pessoaTmp;

isso não vai funcionar , uma Pessoa pode não ser um Advogado.

De uma lida sobre herança e cast.

[]'s

danieldestro

*Pode* ser sim!

Olha isso

Advogado a = new CobraPeçonhenta();
Pessoa p = a;
lista.add( p );

// faça isto
Pessoa x = (Pessoa) lista.get(0);
Advogado y = (Advogado) x;

//ou isto
Advogado w = (Advogado) lista.get(0);

Mas, claro, um advogado deve ter sido incluído na lista, para não dar erro de cast.

jgbt
danieldestro:
*Pode* ser sim!

Olha isso

Advogado a = new CobraPeçonhenta();
Pessoa p = a;
lista.add( p );

// faça isto
Pessoa x = (Pessoa) lista.get(0);
Advogado y = (Advogado) x;

//ou isto
Advogado w = (Advogado) lista.get(0);

Mas, claro, um advogado deve ter sido incluído na lista, para não dar erro de cast.

com certeza, quis economizar na resposta e ficou incompleta.
valeu!!!

mas de qualquer forma, não parece ser o caso, acho que as referencias na lista são de pessoas.

[]'s

A

e se eu quiser que uma pessoa que jah contenha dados se torne um advogado pra depois eu colocar os dados especificos de advogado nela?

C
Pessoa pessoaTmp = (Pessoa) pessoas.get(pessoasJList.getSelectedIndex());

verifique se o objeto pessoas eh mesmo uma Pessoa e tb qual o retorno deste metodo pessoas.get(seu parametro).Acho q a pala eh ai

Falow

danieldestro

Advogado a = new Advogado(); //isto para cara atributo com get/set das duas classes a.setNome( p.getNome() );

Ou use algo como o Jakarta Beans Utils para copiar os dados

jgbt

Se vc fizer isso:

Pessoa p = new Pessoa();
Advogado a = (Advogado) p;

não vai funcionar.

Se vc fizer:

Pessoa p = new Advogado();
Advogado a = (Advogado) p;

vai funcionar.

[]'s

A
Pessoa pessoaTmp = new Advogado();
    pessoaTmp = (Pessoa) pessoas.get(pessoasJList.getSelectedIndex());
    Advogado advogado = (Advogado) pessoaTmp;
    advogado.setOab(oabJText.getText());

nao funcionou isso…

danieldestro

Pq está errado!

jgbt

cara,
que obj vem dessa lista:

pessoas.get(pessoasJList.getSelectedIndex());

posta o erro que ta dando.

[]'s

A

Aí esta o codigo fonte do formulario todo sem as coisas que desenham o mesmo. quando eu clico o ok disparando o metodo do botao abaixo, ele dah o erro que esta colado tambem abaixo.

package br.com.solucoesideais.admOffice.gui;

import javax.swing.DefaultListModel;

import br.com.solucoesideais.admOffice.DAO.AdvogadoDAO;

import br.com.solucoesideais.admOffice.DAO.PessoaDAO;

import br.com.solucoesideais.admOffice.beans.Pessoa;

import br.com.solucoesideais.admOffice.beans.Advogado;

import javax.swing.JOptionPane;

import java.util.List;

public class CadastraAdvogado extends javax.swing.JInternalFrame {

private DefaultListModel pessoasModel = new DefaultListModel() ;
private AdvogadoDAO advogadoDAO;
private List pessoas;

/** Creates new form CadastraAdvogado */
public CadastraAdvogado() {
    initComponents();
    setSize(450,200);
    pessoasJList.setModel(pessoasModel);
    try {
        PessoaDAO pessoaDAO = new PessoaDAO();
        pessoas = pessoaDAO.getList("from Pessoa");
        Pessoa pessoaTmp;
        for(int i=0;i<pessoas.size();i++) {
            pessoaTmp = (Pessoa) pessoas.get(i);
            pessoasModel.addElement(pessoaTmp.getNome());
        }
    }
    catch (Exception e) {
        System.out.println(e);
    }
      
}

private void okJButtonActionPerformed(java.awt.event.ActionEvent evt) {                                          
    Pessoa pessoaTmp = new Advogado();
    pessoaTmp = (Pessoa) pessoas.get(pessoasJList.getSelectedIndex());
    Advogado advogado = new Advogado();
    advogado = (Advogado) pessoaTmp;
    advogado.setOab(oabJText.getText());
    try {
        advogadoDAO = new AdvogadoDAO();
        advogadoDAO.insert(advogado);
    } 
    catch(Exception e) {
        System.out.println(e);
    }

// TODO add your handling code here:
}

private void cancelarJButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                
    this.dispose();

// TODO add your handling code here:
}


Exception in thread AWT-EventQueue-0 java.lang.ClassCastException: br.com.solucoesideais.admOffice.beans.Pessoa

at br.com.solucoesideais.admOffice.gui.CadastraAdvogado.okJButtonActionPerformed(CadastraAdvogado.java:112)

at br.com.solucoesideais.admOffice.gui.CadastraAdvogado.access$000(CadastraAdvogado.java:23)

at br.com.solucoesideais.admOffice.gui.CadastraAdvogado$1.actionPerformed(CadastraAdvogado.java:88)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)

at java.awt.Component.processMouseEvent(Component.java:5488)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)

at java.awt.Component.processEvent(Component.java:5253)

at java.awt.Container.processEvent(Container.java:1966)

at java.awt.Component.dispatchEventImpl(Component.java:3955)

at java.awt.Container.dispatchEventImpl(Container.java:2024)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)

at java.awt.Container.dispatchEventImpl(Container.java:2010)

at java.awt.Window.dispatchEventImpl(Window.java:1766)

at java.awt.Component.dispatchEvent(Component.java:3803)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
danieldestro

1) Não há a necessidade de colocar todo o código.
2) Favor usar a tag [code] (botão em cima da caixa de texto)

Bom, pelo que ví seu DAO te dá uma lista de objetos Pessoa, q vc joga pro seu List.

Não dá para transformar uma Pessoa em Advogado, a não ser que o objeto tenho sido criado como um Advogado (ou subclasse) e esta classe seja subclasse de Pessoa, entendeu?

Criado 8 de junho de 2005
Ultima resposta 8 de jun. de 2005
Respostas 12
Participantes 4