Enum, switch, if? O que eu posso usar para implementar essa classe?

4 respostas
VantuilJose

Tenho o seguinte problema:

Tenho uma classe Pesquisador que acessa uma base de dados Caché a partir de determinada global em determinada posição (piece).
Pra reaproveitar o código que já tenho dentro do caché chamo um método com a seguinte assinatura:

public class Pesquisador{
public List consultaPorCodigo(String global, int piece, String  chavePesquisa){...}
}

Entretanto eu quero encapsular o nome das globais e valor dos pieces do usuário, quero que no construtor ele me passe o que ele quer pesquisar, por exemplo Pesquisador p = new Pesquisador(Pesquisador.FORNECEDOR)

Dessa forma criei vários campos estáticos públicos, mas e pra relacionar eles ao piece teria que criar um switch ou um if…

Existe outra forma mais, digamos, elegante de fazer isso? que demande menos código ou coisas do tipo?

Se não entenderem o que falei, por favor perguntem.

Obrigado,

4 Respostas

UMC

rapaz nao entendir muito o que vc quer.!!!
mais vc poder testar as formas e ver qual fica melhor para vc…
vlw
abs

ViniGodoy

Veja se isso te inspira:
http://www.guj.com.br/posts/list/55885.java

VantuilJose

:oops: Pois é, é meio difícil de explicar, vou posta meu código inteiro, com uma solução que pensei utilizando HashMap, acho que dá pra vc ter uma idéia melhor do que quero:

public class Pesquisador {
    List lista;
    private HashMap<String, Integer> mapa ;
    private String opcao;

    //Nome das globais a serem pesquisadas
    public static final String FORNECEDOR = "";
    public static final String CLIENTE = "";
    public static final String CONTA = "";
    public static final String BANCOS = "^BALBI";
    public static final String CIDADE = "";
    public static final String PRODUTOS = "";
    public static final String LOTE = "";

    //Valor dos pieces pra código(C) e descricao(P - piece)
    private static final int PFORNECEDOR = 1;
    private static final int CFORNECEDOR = 1;
    private static final int PBANCOS = 3;
    /**
    Cria uma nova instancia do objeto Pesquisador que pode retornar
     * uma lista com os itens correspondentes a opcao que contenham
     * na descricao a chave de pesquisa
    <code>Pesquisador</code>.
    @param opcao <code>String</code> Opção de que dados serão pesquisados - Veja os campos estáticos que podem ser utilizados
    @param chavePesquisa <code>String</code> Chave para procurar dados - os dados que contenham na descrição o valor da chaveDePesquisa serão adicionados a lista
    Cache database.
     */
    public Pesquisador(String opcao, String chavePesquisa) {
        this.opcao = opcao;

        mapa = new HashMap<String, Integer>();
        mapa.put(FORNECEDOR, PFORNECEDOR); 
        mapa.put(BANCOS, PBANCOS);
        //...Aqui eu adicionaria todas as outras opções
    }

    public List getListaPesquisa() {
        if (lista == null) construirPesquisa();
        return lista;
    }

    public List atualizarLista(){
        construirPesquisa();
        return lista;
    }

    private void construirPesquisa() {
        ConnectDB.setNameSpace("ORCABOM");
        ConnectDB con = new ConnectDB();
         lista = new ArrayList();
        try {
            String job = Pesquisa.consultaPorCodigo(con.getBanco(), opcao, mapa.get(opcao), null);//Com isso eu recuperaria o que está no HashMap
            banco.ConsultaDB consulta = new ConsultaDB(con.getCon());
            ResultSet rs = consulta.execute("select * from orca.Pesquisa where job ='" + job + "'");
            while (rs.next()) {
                lista.add(new ItemPesquisa(rs.getString("codigo"), rs.getString("linha")));
            }
            consulta.delete("delete from orca.Pesquisa where job ='" + job + "'");
        } catch (Exception ex) {
            System.out.println(ex);
            Logger.getLogger(Pesquisador.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public static void main(String [] args){
        Pesquisador p = new Pesquisador(Pesquisador.BANCOS, null);
        //p.construirPesquisa();
        System.out.println("Tamanho da Lista: " + p.getListaPesquisa().size() + "registro(s)");
        System.out.println(p.getListaPesquisa());
    }


}

Funciona, só q eu acho que deve haver outra opção.

Gobain

ViniGodoy:
Veja se isso te inspira:
http://www.guj.com.br/posts/list/55885.java

Show esse hein? Eu tava com umas dúvidas sobre a usabilidade de enums… muito bom!

Criado 3 de dezembro de 2009
Ultima resposta 3 de dez. de 2009
Respostas 4
Participantes 4