Olá a todos,
Preciso verificar se um objeto é de um determinado “tipo”, atualmente estou fazendo a comparação usando o nome do tipo da classe em String.
O código funciona, mas gostaria de saber se estou fazendo certo e se existe uma maneira mais eficiente do que comparar como strings.
Segue o código.
public void teste(Object o) {
Class c = o.getClass();
Field m[] = c.getDeclaredFields();
for (int i = 0; i < m.length; i++) {
m[i].setAccessible(true);
// Aqui faço a comparação para saber se meu objeto é um String
if(m[i].getType().getSimpleName().toString().equals("String")){
m[i].set(o, "TESTE");
}
// Aqui faço a comparação para saber se meu objeto é um Integer
else if(m[i].getType().getSimpleName().toString().equals("Integer")){
m[i].set(o, 123);
}
// [Boolean, Date, etc....]
}
Se você usa reflection, você pode usar o método isAcessibleFrom. A vantagem é que ele também testa hierarquias.
Outra forma é fazer o teste da classe diretamente.
if (m[i].getType() == String.class)
Comparar pelo SimpleName é uma péssima idéia. Classes em pacotes diferentes podem ter o mesmo SimpleName. Como é o caso da java.util.Timer e javax.swing.Timer