Boa noite a todos
Tenho uma classe Cliente e duas classes que herdam dela PessoaFisica e PessoaJuridica. Estou fazendo um pequeno estudos guardando as referências para vários clientes em um ArrayList que pode ser manipulado para inserir, excluir e modificar clientes. Estou com problemas no método modificar, pois como PessoaFisica e PessoaJuridica têm atributos próprios não podem ser modificadas pelos mesmo método, pensei em usar um switch/case dentro de um do/while para gerar as opções e um stanceof para verificar a classe, mas isso iria gerar “code smells” devido à repetição de codigo, pois as duas classes herdam de Cliente. Gostaria de saber se realmente não há como evitar essa repetição. Vejam o código abaixo.
Obrigado
if(obj instanceof PessoaFisica)
do{
//----ATRIBUTOS CLASSE MÃE Cliente - repetido nos dois menus
System.out.println("0)SAIR");
System.out.println("1)EDITAR NOME");
System.out.println("2)EDITAR TELEFONE");
System.out.println("3)EDITAR E-MAIL");
//----ATRIBUTOS DA CLASSE FILHA PessoaFisica
System.out.println("4)EDITAR CPF");
System.out.println("5)EDITAR RG");
System.out.println("6)EDITAR CEL");
System.out.print("Opção: ");
opcao = sc.nextInt();
System.out.print("\n");
sc.nextLine(); //Limpeza de buffer
//-----codigo repetido nos dois switches
switch (opcao) {
case 0:
System.out.println("Sistema finalizado.");
break;
case 1:
editarNome();
break;
case 2:
editarTelefone();
break;
case 3:
editarEmail();
break;
//------------------------------------------
case 4:
editarCpf();
break;
case 5:
editarRg();
break;
case 6:
editarCel();
break;
default:
System.out.println("Opção inválida");
}
}while(opcao != 0);
} else if(obj instanceof PessoJuridica){
do{
//----ATRIBUTOS CLASSE MÃE Cliente repetido nos dois menus
System.out.println("0)SAIR");
System.out.println("1)EDITAR NOME");
System.out.println("2)EDITAR TELEFONE");
System.out.println("3)EDITAR E-MAIL");
//----ATRIBUTOS DA CLASSE FILHA PessoaJuridica
System.out.println("4)EDITAR RAZÃO ESTADUAL");
System.out.println("5)EDITAR INSCRIÇÃO ESTADUAL");
System.out.println("6)EDITAR CNPJ");
System.out.print("Opção: ");
opcao = sc.nextInt();
System.out.print("\n");
sc.nextLine(); //Limpeza de buffer
//-----codigo repetido nos dois switches
switch (opcao) {
case 0:
System.out.println("Sistema finalizado.");
break;
case 1:
editarNome();
break;
case 2:
editarTelefone();
break;
case 3:
editarEmail();
break;
//------------------------------------------
case 4:
editarRazaoSocial();
break;
case 5:
editarInscricaoEstadual();
break;
case 6:
editarCnpj();
break;
default:
System.out.println("Opção inválida");
}
}while(opcao != 0);
}