2

我有看起来像这样的通用类:

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

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

我使用 getDeclaredMethods 来查找 Y 上的进程,只是用它的名字(不是参数,故意)。当我查看返回的 Method[] 时,进程显示了两次,输入 = 对象、输出 = 对象,然后是实际的实例化类型:整数和浮点数。

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

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

4

2 回答 2

5

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

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

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

于 2013-01-03T20:19:35.980 回答
0

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

于 2013-01-03T18:33:55.040 回答