Metodo genérico utilizando Instanceof

5 respostas
mano8801

Olá,
Tenho uma classe Interface que serve apenas para a impressao de dados na tela.
Tenho várias classes, como por exemplo: Livro, Jornal, Cd ... e todas estas sao subclasses da classe Acervo.
O meu método para a impressao das informações, recebe um objeto do tipo Acervo como mostrado abaixo:

public class Interface {  
     
       public static void mostraAcervo(Acervo acervo) {  
           if(acervo instanceof Cartaz){  
                  
               System.out.println(  
               "Título: "+ acervo.getTitulo()+" - "+acervo.getnEdicao()+ "  - "+acervo.getCidade()+ "  - "+ acervo.getEditora()+ "  - "+acervo.getAno()+  
               "\n Palavras-chave:"+"\n 1."+acervo.getPalavraChave1()+"\n 2."+acervo.getPalavraChave2()+"\n "+acervo.getPalavraChave3());  
                 
           }else if(acervo instanceof Cd){  
             
             //AQUI EU TERIA QUE IMPRIMIR OS DADOS QUE SAO COMUM A TODAS CLASSES(atributos da classe Acervo) e também alguns outros atributos como o tempo de duração (no caso do Cd) no qual eu teria que acessar com um get. Para ilustrar melhor ficaria assim:  acervo.getDuracao() - mas claro que não é possível fazer isso ja que a classe acervo não contém o método getDuracao() e quem o contém é  a classe filha(Cd)  
   
                
           }

Então pessoal, como posso fazer para exibir estes atributos que são exclusivos da subclase?
Obrigado

OBS: estou postando novamente pois postei na sessão errada no meu post anterior

5 Respostas

fesaab

Você pode resolver isso de duas maneiras:

utilizando cast:

System.out.println( ((Cd)acervo).getDuracao() );

ou vc pode fazer um novo objeto Cd:

Cd meuCd = acervo; System.out.println( meuCd.getDuracao() );

rogelgarcia

Voce precisará usar reflection

http://java.sun.com/docs/books/tutorial/reflect/index.html

mano8801

fesaab:
Você pode resolver isso de duas maneiras:

utilizando cast:

System.out.println( ((Cd)acervo).getDuracao() );

ou vc pode fazer um novo objeto Cd:

Cd meuCd = acervo; System.out.println( meuCd.getDuracao() );

Olá,
Não está correto o jeito que você fez, pois um objeto da classe filha (meuCd) está recebendo um objeto da classe mãe(acervo), e isso é impossivel, porém se fosse ao contrário estaria certo.Digo, a classe mae receber uma classe filha.
Acho que oque você quis dizer foi:

Cd meuCd = (Cd) acervo; meuCd.getDuracao();

Fiz desta maneira e por enquanto não apresentou nenhum problema…
De qualquer jeito, obrigado pela dica.

edu_merckx

como o rogelgarcia mencionou, use reflection…

fesaab

ops, foi mal, falto o cast no meu código mesmo…

quanto ao reflection, eu acho que não tem necessidade de usar algo tão poderoso para um problema tão simples…

Criado 10 de abril de 2010
Ultima resposta 10 de abr. de 2010
Respostas 5
Participantes 4