我正在尝试解析与泛型类或接口相关的实现类的所有实际类型。
我为此编写了一个actualtypeargumentsresolver
,但它仅在typename保持一致时才有效。我想忽略 typename
并获取所有实际类型。
我怎样才能实现这个目标?
任何帮助将不胜感激。谢谢!
@Test public void testIndirectlyExtendedGenericSuperclassWithDiffTypeName() { abstract class AbstractClass3<AAA, BBB, CCC> { } abstract class AbstractClass2<AA, BB, CC> extends AbstractClass3<CC, Map, BB> { } abstract class AbstractClass1<A, B> extends AbstractClass2<Long, A, Boolean> { } class Impl extends AbstractClass1<String, Integer> {} Type[] arr = ActualTypeArgumentsResolver.resolve(Impl.class, AbstractClass3.class); Assert.assertTrue(arr.length == 3); Assert.assertEquals(arr[0], Boolean.class); Assert.assertEquals(arr[1], Map.class); Assert.assertEquals(arr[2], String.class); }
guava 的 typetoken
支持此功能。在代表 impl
的 typetoken
上使用 getsupertype
方法来获取 abstractclass3
的参数化版本以及所有实际类型参数。
以上是如何解析java中相对于泛型类或接口的实现类的所有实际类型?的详细内容。更多信息请关注PHP中文网其他相关文章!