我有这个界面:
public interface EventHandler<T extends Event> {
void handle(T event);
}
并实现该类:
public class MyEventHandler implements EventHandler<MyEvent> {
@Override
public void handle(MyEvent event) {
//do something
}
}
在此案例中,
T
参数是MyEvent
,这是Event
的具体实现。如何使用反射获取此信息? 最佳答案
通过通用接口解析T
的类型。例如。
public interface SomeInterface<T> {
}
public class SomeImplementation implements SomeInterface<String> {
public Class getGenericInterfaceType(){
Class clazz = getClass();
ParameterizedType parameterizedType = (ParameterizedType) clazz.getGenericInterfaces()[0];
Type[] typeArguments = parameterizedType.getActualTypeArguments();
Class<?> typeArgument = (Class<?>) typeArguments[0];
return typeArgument;
}
}
public static void main(String[] args) {
SomeImplementation someImplementation = new SomeImplementation();
System.out.println(someImplementation.getGenericInterfaceType());
}
PS:请记住acutalTypeArguments的类型为
Type
。它们不能是Class
。在您的情况下,这是一个类,因为您的类型定义为EventHandler<MyEvent>
。关于java - 如何从实现类中获取通用接口(interface)的类型参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60261576/