【发布时间】:2016-02-05 21:17:04
【问题描述】:
我想在 Java 8 中使用反射重构方法的签名。我遇到了泛型方法的一些问题。 特别是,我找不到任何可以帮助恢复有关模板类型声明中“扩展”或“超级”情况的信息。
这是一个基于已知源代码的特定测试用例:
来自源代码的方法签名:public static <T extends AssertDelegateTarget> T assertThat(T assertion)
首先,有没有一种优雅的方式来重构<T extends AssertDelegateTarget> 部分而无需解析字符串?
这是我通过反思获得的主要信息:
-
method.toString():public static org.assertj.core.api.AssertDelegateTarget org.assertj.core.api.Assertions.assertThat(org.assertj.core.api.AssertDelegateTarget) -
method.toGenericString():public static <T> T org.assertj.core.api.Assertions.assertThat(T)“扩展 AssertDelegateTarget”发生了什么?
-
method.getReturnType.toString():interface org.assertj.core.api.AssertDelegateTarget -
method.getGenericParameterTypes()[0].getTypeName():T
根据上述反射信息,我可以假设 T 和 AssertDelegateTarget 之间存在关系,但我如何知道它是“扩展”还是“超级”?
【问题讨论】:
标签: java generics reflection