使用getDeclaredMethods中的实际类型查找泛型方法

Fra*_*ank 2 java generics reflection

我有通用类,看起来像:

interface X<Input, Output>
{
  Output process(Input input);
}

class Y implements X<Integer, Float> 
{   
  Float process(Integer input); 
}
Run Code Online (Sandbox Code Playgroud)

我使用getDeclaredMethods来查找Y上的进程只是用它的名字(而不是有意的参数).当我查看返回Method []时,进程显示两次,使用Input = Object,Output = Object,然后使用实际的实例化类型:Integer和Float.

请注意:我可以在Method []和1函数中看到1个带Object,Object的函数,其中包含我用来实例化的实际类型,如Integer,Float.所以,我感兴趣的第二个函数可以从Method []访问.

只获得实际类型的方法的最佳方法是什么?

new*_*cct 5

然后使用实际的实例化类型.

那是不可能的.您应该看到一个参数类型为的方法Object.您还可以查看方法的泛型参数和返回类型,您会发现它们都是类型变量(Input并且Output是类型变量).

使用类型参数的特定类型参数从其继承的此类的类将具有两个方法:具有更具体的参数和返回类型的方法,以及具有原始类的方法的参数和返回类型的桥接方法,按顺序覆盖它.如果您问如何忽略桥接方法,只需检查它是否是桥接方法(.isBridge())