Maison  >  Article  >  Comment résoudre tous les types réels en Java par rapport à la classe d'implémentation d'une classe ou d'une interface générique ?

Comment résoudre tous les types réels en Java par rapport à la classe d'implémentation d'une classe ou d'une interface générique ?

WBOY
WBOYavant
2024-02-12 18:00:081029parcourir

Contenu de la question

J'essaie d'analyser tous les types réels d'une classe d'implémentation liée à une classe ou une interface générique.

J'ai écrit un actualtypeargumentsresolver,但它仅在typename保持一致时才有效。我想忽略 typename pour cela et j'obtiens tous les types réels. Comment puis-je atteindre cet objectif ?

Toute aide serait grandement appréciée. Merci!

@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);
}

Workaround

guava Une version paramétrée de typetoken 支持此功能。在代表 impltypetoken 上使用 getsupertype 方法来获取 abstractclass3 avec tous les paramètres de type réels.

65bee58535616

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer