Usar o tipo do objeto como cast

3 respostas
M

Bah…to com um probleminha aqui e não to achando solução!

Tenho um método que recebe como parametro um objeto…dentro do método eu preciso saber qual o tipo desse objeto, para que eu possa usar de cast…quero saber se isso é possível!

public ArrayList metodo(Object objeto)
{
  if ( ((objeto.getClass())array[0]).getId_Cliente() == 5 )
  {
    ...
  }
}

É mais ou menos isso que quero fazer, mas dessa forma como postei não finciona!

3 Respostas

S
:arrow: instanceof  :!: Verifica se o objeto passado 'a sua esquerda é do tipo da classe a direita

EX:

String teste=teste;

if(teste instanceof String)

System.out.println(Variavel teste eh do tipo String);

else

System.out.println(Variavel não teste eh do tipo String);

:arrow: Cast para OBJETO :!: Usa-se para quando vc quer passar um tipo de objeto mais generio para um mais definido, por exemplo um Object para uma String…
String teste=“teste”;
Object obj=teste;//coloca o obj teste dentro de um Objeto Object
teste=bobj
;//Retorna objeto da String para a String teste

espero ter explicado…

M

Não…não é isso cara =(

Tp…eu não sei que tipo de objeto vai ser passado para mim…logo…não posso fazer um cast assim (String).

Tenho que fazer algo assim:

tipo_objeto = objeto.getTipo();

if ( ((tipo_objeto)array[0]).Id == 5 ) {}
V

se eu entendi, vc tem um array (X) de qualquer coisa e recebe qualquer objeto (Y), e deseja interpretar X como se fosse instancia de Y, é isso?

no ArrayList tem o seguinte método:
public Object[] toArray(Object a[]) {
        if (a.length < size)
            a = (Object[])java.lang.reflect.Array.newInstance(
                                a.getClass().getComponentType(), size);

	System.arraycopy(elementData, 0, a, 0, size);

        if (a.length > size)
            a[size] = null;

        return a;
    }
mas isso só funciona com array, pois os dados são copiados para o novo array sem serem interpretados.

mas agora:
como vc (e o compilador tb) vai saber diretamente que todo objeto contido no array possuirá um método [i] getId_Cliente()
sem saber previamente o tipo deste objeto??
R.: somente através de herança ou interface

entretanto, vc poderia fazer isso usando reflexão e descobrir se o objeto contido no array tem esse método, da seguinte maneira:

Class ac = array[0].getClass();
Method acm = ac.getMethod("getId_Cliente",null);
if (acm != null) {
  Object retorno = acm.invoke(array[o],null);
}
fazendo isso vc não precisa saber o tipo do objeto em questão, pois não terá importância mesmo!

espero ter ajudado...

Criado 13 de junho de 2005
Ultima resposta 13 de jun. de 2005
Respostas 3
Participantes 3