有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java解析runtim上方法的泛型返回类型

在方法的泛型返回类型仅取决于输入参数的类型(而不是类类型参数)的情况下,如何在给定具体参数列表的情况下将泛型类型解析为实际类型

假设我有一个这样的方法

public <T,S extends T> T doSomething(T input, S derivedInput)

在运行时,我有一个表示这个方法的方法对象m,还有一些参数对象xy,这样我就可以通过反射调用这个方法

Object returnval = m.invoke(instance,Object[]{x,y});

因为返回类型是由输入的类型决定的,并且我知道运行时xy的实际类型,所以我应该能够在运行时弄清楚returnval的实际类型是什么,或者至少是实际类型中比Object更具体的超类。在这个示例中,我希望有一种方法可以从mxy自动推断类x.getClass(),当然,假设xy确实满足方法定义中的类型约束,但理想情况下,我还能够在运行时判断它们是否违反了该约束

现在我知道有Method#getGenericReturnTypeMethod#getGenericParameterTypes,但我不知道如何使用它们来进行我想要的推断。我还知道,如果涉及到类的类型参数,那么这将不起作用,因为这些类型参数会被擦除。因此,如果只给出一个列表和一个整数,我将无法解析T List<T>.get(int)中的t。但是如果返回类型仅依赖于参数类型,我认为这应该是可能的


共 (0) 个答案