我有类似的通用类:
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 []中访问。
获取实际类型的方法的最佳方法是什么?
答案 0 :(得分:5)
然后使用实际的实例化类型。
那是不可能的。您应该看到一个参数类型为Object
的方法。您还可以查看方法的泛型参数和返回类型,您会发现它们都是类型变量(Input
和Output
是类型变量)。
此类的子类通过类型参数的特定类型参数从其继承,将有两个方法:具有更具体的参数和返回类型的方法,和桥接方法,与原始类的方法的参数和返回类型,以覆盖它。如果您问如何忽略桥接方法,只需检查它是否是桥接方法(.isBridge()
)
答案 1 :(得分:0)
通用类型仅在编译时才知道。 Object
是运行时的实际泛型,因此在运行程序时无法获取它们。