ジェネリック クラスまたはインターフェイスに関連する実装クラスのすべての実際の型を解決しようとしています。
私はこれのために actualtypeargumentsresolver
を書きましたが、これは型名が一貫している場合にのみ機能します。 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
で gestertype
メソッドを使用して、パラメータ化されたバージョンの abstractclass3
とすべての実際の型パラメータを取得します。
以上がジェネリッククラスまたはインターフェイスの実装クラスに関連してJavaのすべての実際の型を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。