hbshzl 2018-10-13 09:33 采纳率: 100%
浏览 3090
已采纳

带有泛型的接口方法实现类使用反射获取方法参数类型时多一个Object参数

由于业务需要在接口方法中使用了泛型,多个实现类的相同方法传入的实参类型不同,想用反射查看具体的实参类型,进而转换为实参的类型。
但使用中遇到了一个问题,接口定义的方法只有一个“T”参数,反射method.getParameterTypes()却得到两个参数类型,请问各位大牛java内部的实现方式是怎样的?
另外,使用jdk1.8时还会出现反射后的两个参数顺序颠倒的情况,还请各位帮忙分析一下,具体代码如下:

接口

 public interface ProcessTestService<T> {

    void test(T param) throws Exception;
}

实现类

 public class ProcessTestServiceImpl implements ProcessTestService<Integer> {

    @Override
    public void test(Integer param) throws Exception {

    }
}

测试类

public class TestDamo {

    public static void main(String[] args) {
        ProcessTestService processTestService = new ProcessTestServiceImpl();
        Method[] methodArray = processTestService.getClass().getDeclaredMethods();
        labe:for (Method method : methodArray) {
            if ("test".equals(method.getName())) {
                for (Class clazz : method.getParameterTypes()){
                    System.out.println(clazz);
                }
            }
        }
    }
} 
  • 写回答

1条回答 默认 最新

  • 大川里的小川人 2018-10-13 09:45
    关注

    原因是:通过反射获取内部method的时候,其实一个是test 一个 object,至于这个object怎么来的,是因为所有的类顶部都继承了object这个类,如果还不清楚,

        Method[] methodArray = processTestService.getClass().getDeclaredMethods();
    

    楼主你的这个方法里面,getClass 不就是一个方法吗? 这是继承至 object的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 SQL Server下载
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求