Heim  >  Artikel  >  Wie löst man alle tatsächlichen Typen in Java relativ zur Implementierungsklasse einer generischen Klasse oder Schnittstelle auf?

Wie löst man alle tatsächlichen Typen in Java relativ zur Implementierungsklasse einer generischen Klasse oder Schnittstelle auf?

WBOY
WBOYnach vorne
2024-02-12 18:00:081064Durchsuche

Frageninhalt

Ich versuche, alle tatsächlichen Typen einer Implementierungsklasse zu analysieren, die sich auf eine generische Klasse oder Schnittstelle beziehen.

Ich habe dafür ein actualtypeargumentsresolver,但它仅在typename保持一致时才有效。我想忽略 typename geschrieben und bekomme alle tatsächlichen Typen. Wie kann ich dieses Ziel erreichen?

Jede Hilfe wäre sehr dankbar. Danke!

@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 Eine parametrisierte Version von typetoken 支持此功能。在代表 impltypetoken 上使用 getsupertype 方法来获取 abstractclass3 mit allen tatsächlichen Typparametern.

65bee58535616

Das obige ist der detaillierte Inhalt vonWie löst man alle tatsächlichen Typen in Java relativ zur Implementierungsklasse einer generischen Klasse oder Schnittstelle auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen