[Resolvido] Down cast automático?

2 respostas
marciosouzajunior

Ae pessoal, estou com um probleminha aqui que é o seguinte: uso o procedimento abaixo para chamar alguns JinternalFrames na minha aplicação:

if (!verificaInternal(cadUsuarios)) {
            try {

                cadUsuarios = new FrmCadUsuarios();
                desktop.add(cadUsuarios);
                cadUsuarios.preparaForm();
                configuraPermissoes(cadUsuarios, "Administração", cadUsuarios.getName());
                cadUsuarios.setVisible(true);

            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Ocorreu um erro durante a operação: " + e.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
            }
        } else {
            cadUsuarios.toFront();
        }
Cada item de menu tem um action que executa esse procedimento e a única coisa que muda é o tipo de formulário (FrmCadUsuario, FrmCadModulos, ...) e um outro parâmetro ali na chamada configuraPermissões. Queria ter uma forma de encapsular isso aí pra não ter que colocar esse procedimento em todos actions, então pensei no seguinte:
private void carregaForm(JInternalFrame frm){
        
        // código
        
    }

Então eu passaria a subclasse pro método, mas o problema é que a subclasse tem métodos específicos que não poderiam ser executados sem a conversão. Então pergunto se alguem sabe alguma forma de fazer essa conversão automática ou algum recurso do java para executar os métodos da subclasse.

2 Respostas

ribclauport

Penso que se você quer, ter a segurança no sentido de dar casting, e ter os metodos daquela classe deve usar Generics, ou instance of ou isAssignableFrom …

creio que esse post pode abrir sua visão:

marciosouzajunior

Então, pelo que percebi no post o cara verifica qual tipo de classe recebida utilizando ifs, que no caso não seria uma boa idéia mas na verdade eu consegui resolver o problema da seguinte maneira:

private void carregaForm(FrmCadBase frm, String modulo) {

        if (!verificaInternal(frm)) {
            try {

                desktop.add(frm);
                frm.preparaForm();
                configuraPermissoes(frm, modulo, frm.getName());
                frm.setVisible(true);

            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Ocorreu um erro durante a operação: " + e.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
            }
        } else {
            frm.toFront();
        }

    }

Viu ali que estou passando uma classe tipo FrmCadBase? Pois é, herdei JInternalFrame nela e coloquei os métodos que são comuns a todos. Agora todos meus formulários são subtipos dessa classe.

Obrigado pela atenção!!

Criado 8 de março de 2012
Ultima resposta 9 de mar. de 2012
Respostas 2
Participantes 2