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

时间:2013-01-03 18:25:51

标签: java generics reflection

我有类似的通用类:

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

class Y implements X<Integer, Float> 
{   
  Float process(Integer input); 
}

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

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

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

2 个答案:

答案 0 :(得分:5)

  

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

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

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

答案 1 :(得分:0)

通用类型仅在编译时才知道。 Object是运行时的实际泛型,因此在运行程序时无法获取它们。