Verificar se um objeto implementa determinada interface [RESOLVIDO]

5 respostas
G

No método abaixo, estou usando instanceof, mas não funciona.
Alguém sabe me dizer como verificar se um objeto implementa determinada interface??

private static void fazerAnimalBrincar(List lista) {
		Iterator it=lista.iterator();
		while(it.hasNext()){
			if(it.next() instanceof Estimacao) {
				Estimacao e=(Estimacao) it.next();
				e.brincar();
			}
		}
	}

5 Respostas

drsmachado

Provável que você esteja errando em algo.
Como só temos o método, não podemos dizer nada.
Mas, veja aqui uma leve explicação.

G

drsmachado:
Provável que você esteja errando em algo.
Como só temos o método, não podemos dizer nada.
Mas, veja aqui uma leve explicação.

O código que eu postei compila, mas não funciona…

drsmachado

Não funciona é uma expressão extremamente abrangente.
O operador instanceof está habilitado a retornar uma verificação como true (verdadeiro) se:
a instanceof A:

  • O operando a é um objeto da classe A;
  • O operando a é um objeto de uma subclasse de A;
  • O operando a é um objeto de uma classe que implementa A;
rmendes08

O problema é este trecho:

if(it.next() instanceof Estimacao) {  
            Estimacao e=(Estimacao) it.next(); 
            //...
}

Você chama it.next() 2 vezes seguidas. Quando você invoca next() o iterador avança para o próximo elemento. Sendo assim, o objeto que você tenta converter para Estimacao não é o mesmo objeto sobre o qual você aplicou o teste.

G

Na mosca rmendes08!!! Muito obrigado!

Criado 7 de junho de 2013
Ultima resposta 7 de jun. de 2013
Respostas 5
Participantes 3