Onde estaria o erro? (Cast)

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]

 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

Pode ser sim!

Olha isso

[code]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);[/code]

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

[quote=danieldestro]Pode ser sim!

Olha isso

[code]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);[/code]

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

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

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?

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

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

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

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

nao funcionou isso…

Pq está errado!

cara,
que obj vem dessa lista:

pessoas.get(pessoasJList.getSelectedIndex());

posta o erro que ta dando.

[]'s

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)

  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?