Comparar Types das classes

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....]
}

Até mais.

Acho que o instanceof resolve o teu problema, dá uma olhada: http://www.devx.com/tips/Tip/14642

pra comparar instâncias de classes o instanceof serve (como o nome mesmo sugere)!

1 curtida

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

ViniGodoy,
É exatamente o que eu estou precisando.

Valeu, Obrigado!!!

Só corrigindo, o método chama-se isAssignableFrom e não isAcessibleFrom. E é uma espécie de instanceOf entre objetos do tipo Class.

Já que vocês está usando reflection, dá uma olhada nesse site:

http://tutorials.jenkov.com/java-reflection/index.html

Em inglês, mas muito bom.

[]'s