java解析runtim上方法的泛型返回类型
在方法的泛型返回类型仅取决于输入参数的类型(而不是类类型参数)的情况下,如何在给定具体参数列表的情况下将泛型类型解析为实际类型
假设我有一个这样的方法
public <T,S extends T> T doSomething(T input, S derivedInput)
在运行时,我有一个表示这个方法的方法对象m
,还有一些参数对象x
和y
,这样我就可以通过反射调用这个方法
Object returnval = m.invoke(instance,Object[]{x,y});
因为返回类型是由输入的类型决定的,并且我知道运行时x
和y
的实际类型,所以我应该能够在运行时弄清楚returnval
的实际类型是什么,或者至少是实际类型中比Object更具体的超类。在这个示例中,我希望有一种方法可以从m
、x
和y
自动推断类x.getClass()
,当然,假设x
和y
确实满足方法定义中的类型约束,但理想情况下,我还能够在运行时判断它们是否违反了该约束
现在我知道有Method#getGenericReturnType
和Method#getGenericParameterTypes
,但我不知道如何使用它们来进行我想要的推断。我还知道,如果涉及到类的类型参数,那么这将不起作用,因为这些类型参数会被擦除。因此,如果只给出一个列表和一个整数,我将无法解析T List<T>.get(int)
中的t。但是如果返回类型仅依赖于参数类型,我认为这应该是可能的
共 (0) 个答案