当前位置:  开发笔记 > 编程语言 > 正文

Java反射:从实现类中获取通用接口的类型参数

如何解决《Java反射:从实现类中获取通用接口的类型参数》经验,为你挑选了1个好方法。

我有这个界面:

public interface EventHandler {

    void handle(T event);

}

而这个类实现它:

public class MyEventHandler implements EventHandler {
    @Override
    public void handle(MyEvent event) {
        //do something
    }
}

鉴于:

Class myEventHandlerClass = getClazz();

在这个条款中,T参数是MyEvent,这是一个具体的实现Event.如何使用反射获得这个?

我想要这样的东西:

Class myEventHandlerClass = getClazz();
Method handleMethod = myEventhandlerClass.getDeclaredMethod("handle");

Class[] params = method.getParameterTypes();
Class eventConcreteType = params[0];

myEventhandlerClass.getDeclaredMethod("handle");抛出NoSuchMethodException,因为我没有指定参数类型,因为我只知道这是一个具体的实现,Event但我不知道哪个.



1> René Link..:

T通过通用接口解析类型.例如

public interface SomeInterface {
}

public class SomeImplementation implements SomeInterface {

    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.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有