Duvida em um Método

Tenho o seguinte metodo:

public ResultSet consultaCargo(int op,int id,String dados) throws SQLException{
        //Opção que retorna todos os cargos cadastrado
    	if(op == 1 ){
            rs = stm.executeQuery("select id_cargo,nome_cargo from cad_cargo");
            return rs;
        }
    	//Opção para busca de um cargo informado pelo usuário ou programa
    	if(op == 2){
            rs = stm.executeQuery("select id_cargo,nome_cargo from cad_cargo where id_cargo = '"+id+"'");
            return rs;
        }
    	//Opção para busca de cargos que não estão definidos para o funcionário
    	if(op == 3){
            rs = stm.executeQuery("select id_cargo,nome_cargo from cad_cargo where id_cargo NOT IN (select fk_cargo " +
		                  "from cad_cargo,cad_funcionario,funcionario_cargo " +
					"where id_cargo = fk_cargo " +
					"and id_funcionario = fk_funcionario " +
					"and fk_funcionario = '"+id+"') order by nome_cargo");
            return rs;
    	}
        if(op == 4){
            rs = stm.executeQuery("select nome_cargo from cad_cargo where nome_cargo = '"+dados+"'");
        }
        return null;
    }

Deu pra perceber que este metodo tem 4 funções diferentes dependendo da que for passada por parametro vai ser executada uma delas. Minha duvida é, seria melhor eu fazer de outra forma como sobrecarga de método ou não?

Polimorfismo tem uns exemplos praticos.

Pq vc não troca os ifs por switch…

Você pode definir vários métodos com o mesmo nome mas diferentes parâmetros (veja que “id” é usado apenas em duas das consultas, e “dados” em apenas uma das consultas. )
Você também pode definir vários métodos com nomes diferentes, para facilitar a compreensão, se eles efetivamente fizerem coisas diferentes. No seu caso:

consultaTodosCargos()
consultaCargoPorId (int idCargo)
consultaCargoNaoDefinido (int idCargo)
consultaCargoPorNome (String nomeCargo)

Não use palavras muito genéricas (no seu caso você usou “dados”). Use a palavra certa (por exemplo, “nomeCargo”).

Coisas que têm cheiro de genéricas:

“processar”
“executar”
“dados”
“contador”
“tmp”
“consultar”

Se você achar alguma variável ou método com algum nome desses (sem a especificação completa, por exemplo “dadosCliente” ou coisa parecida) é interessante renomear, a menos que seja efetivamente genérica.

Antigamente a nossa área não se chamava “Informática” ou “TI” e sim “Processamento de Dados”.

fnascimento Este método implementa uma assinatura de uma interface. Poderia adicionar 3 metodos com mesmo nome na interface so que com assinaturas diferentes e implementar cada um.
KassiPretti eh acho que vou trocar pra switch é mais legível e prático

thingol Valeu pela dica :smiley: