Interfaces

3 respostas
renatosilva

Como saber se uma classe implementa determinada interface?

Terei que fazer uma busca manual em Class.getInterfaces()?

3 Respostas

ciczan

Use o instanceof

http://mindprod.com/jgloss/instanceof.html

T

instanceof é legal e não faz mal!

Existe até um bytecode específico para instanceof na JVM, ou seja, isso é executado da maneira mais rápida possível.

Dá até para usar aqueles truques de “marker interfaces” (interfaces que não têm métodos nem constantes, que são usadas apenas para “marcar” a classe. )
Já vi muita gente boa que faz o seguinte: não conhece o lance de “marker interfaces” e define que todas as classes que deviam fazer uma determinada coisa (por exemplo, tratam de pagamentos) têm de ter um nome terminado com um determinado sufixo. (Não, não era que todas tinham de herdar de uma determinada classe - como não existe múltipla herança em Java, se você fizesse isso iria amarrar demais o sistema).
Então para testar, você precisa pegar o nome da classe (obj.getClass().getName()) e usar algo como “endsWith”. Isso é bem mais lento que o esquema de “marker interface” e tem cheiro de gambiarra.

pcalcado

Vale lembrar que no Tiger foi implementado metadata também para evitar esse uso de interface, mas Java > 5 é uma boa saída, quando necessário.

[]s

Criado 22 de dezembro de 2004
Ultima resposta 22 de dez. de 2004
Respostas 3
Participantes 4