Concatenação de If's em conversão de tipo

2 respostas
pedroabs

Galera, seguinte:

Se uma variável do tipo Object pode conter qualquer tipo de objeto, como que eu posso garantir o seu cast de uma forma dinâmica sem concatenar um monte de if's?

exemplo:

Object o = 12;

if (o instanceof Integer){
     Integer i = (Integer) o;
} else if (o instanceof Double) {
     Double d = (Double) o;
} else if (o instanceof Float) {
     Float f = (Float) o;
} 

.... e assim por diante

gostaria de evitar este monte de IF's ....

há alguma forma, por exemplo, usando a classe Class???

há como declarar uma variável de forma dinâmica?

Grato !

2 Respostas

davidbuzatto

O que vc está querendo fazer?
Um tratamento genérico para números?

Os wrappers para números herdam de Number.

[]´s

pedroabs

Pois é David, o que eu quero fazer é o seguinte: estou criando em Java uma pequena imitação do dot net framework, que é o DataSet (eu disse pequena mesmo. Sem grandes pretensões).

Estou fazendo isso, com o intuito de usar como um TableModel em uma JTable.

Então a estrutura é a seguinte:

Uma DataSet possui uma coleção de DataRows e de DataColumns. As colunas "DataColumns" tem que ser setadas primeiro no DataSet para que se possa então, criar DataRows através de um método estático.

Segue código:

DataSet rs = new DataSet();

        //cria as colunas
        rs.addColumn(new DataColumn(String.class,"Nome", 0));
        rs.addColumn(new DataColumn(String.class,"Telefone", 1));
        rs.addColumn(new DataColumn(Integer.class,"Idade", 2));
        
        //a partir das colunas criadas, vai se setando cada DataRow.
        DataRow dr = rs.newRow();
        dr.setValue("Nome", "Pedro");
        dr.setValue("Telefone", "111");
        dr.setValue("Idade", 33);
        rs.addRow(dr);

Como você pode reparar, ao criar uma DataColumn, eu atribuo também o tipo de dado que ela deverá armazenar. Veja o trecho do código:

rs.addColumn(new DataColumn(Integer.class,"Idade", 2));

A idéia é a seguinte:

Ao recuperar o dado de uma DataRow tal como o exemplo abaixo, gostaria de que o dado viesse com o tipo certo. O que na verdade ele até vem, pois eu armazenei em sua coleção com o tipo certo. Ex:
dr.setValue("Idade", 33)
DataRow dr = rs.getRow(33);
Object o = dr.getValue("Idade")

O problema é que a variável que recebe este valor TEM QUE SER DO TIPO Object (conforme trecho acima), e eu gostaria de saber se há uma maneira de o seu tipo der declarado de forma dinâmica.

Obrigado.

Criado 30 de outubro de 2009
Ultima resposta 31 de out. de 2009
Respostas 2
Participantes 2