Saya cuba menghuraikan semua jenis sebenar kelas pelaksanaan yang berkaitan dengan kelas atau antara muka generik.
Saya menulis actualtypeargumentsresolver
,但它仅在typename保持一致时才有效。我想忽略 typename
untuk ini dan mendapatkan semua jenis sebenar.
Bagaimanakah saya boleh mencapai matlamat ini?
Sebarang bantuan amat kami hargai. Terima kasih!
@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 Versi berparameter typetoken
支持此功能。在代表 impl
的 typetoken
上使用 getsupertype
方法来获取 abstractclass3
dengan semua parameter jenis sebenar.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan semua jenis sebenar dalam java berbanding kelas pelaksanaan kelas atau antara muka generik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!