私はこのインターフェースを持っています:
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>
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加