reservada programacion palabra metodos interfaces genericos genericas generica ejemplo java class generics interface implements

java - programacion - palabra reservada instanceof



Compruebe si un T genérico implementa una interfaz (3)

entonces tengo esta clase en Java:

public class Foo<T>{ }

y dentro de esta clase, quiero saber si T implementa cierta interfaz.

El siguiente código NO funciona, pero es la idea de lo que quiero lograr:

if(T.class implements SomeInterface){ // do stuff }

así que quiero comprobar si la clase T que se pasó a Foo tiene implements SomeInterface en su firma.

¿Es posible? ¿Cómo?


Genéricos, curiosamente, el uso también se extends a las interfaces. 1 Querrá usar:

public class Foo<T extends SomeInterface>{ //use T as you wish }

Esto es realmente un requisito para la implementación, no una verificación de verdadero / falso .

Para una verificación de verdadero / falso, use genéricos ilimitados ( class Foo<T>{ ) y asegúrese de obtener una Class<T> para que tenga un tipo refinable:

if(SomeInterface.class.isAssignableFrom(tClazz));

donde tClazz es un parámetro de tipo java.lang.Class<T> .

Si obtiene un parámetro de tipo recuperable, entonces no es más que:

if(tParam instanceof SomeInterface){

pero esto no funcionará solo con la declaración genérica.

1 Si desea requerir la extensión de una clase y múltiples interfaces, puede hacer lo siguiente: <T extends FooClass & BarInterface & Baz> La clase (solo una, ya que no hay herencia múltiple en Java) debe ir primero , y cualquier interfaz después de eso en cualquier orden.


Usar isAssignableFrom()

isAssignableFrom () determina si la clase o interfaz representada por este objeto de Clase es la misma, o es una superclase o superinterfaz de, la clase o interfaz representada por el parámetro de Clase especificado.

if (SomeInterface.class.isAssignableFrom(T class)) { //do stuff }


puedes verificarlo usando isAssignableFrom

if (YourInterface.class.isAssignableFrom(clazz)) { ... }

o para obtener la matriz de interfaz como

Class[] intfs = clazz.getInterfaces();