ホームページ  >  記事  >  ジェネリッククラスまたはインターフェイスの実装クラスに関連してJavaのすべての実際の型を解決するにはどうすればよいですか?

ジェネリッククラスまたはインターフェイスの実装クラスに関連してJavaのすべての実際の型を解決するにはどうすればよいですか?

WBOY
WBOY転載
2024-02-12 18:00:081029ブラウズ

質問内容

ジェネリック クラスまたはインターフェイスに関連する実装クラスのすべての実際の型を解決しようとしています。

私はこれのために 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);
}

Solution

guavatypetoken はこの機能をサポートしています。 impl を表す typetokengestertype メソッドを使用して、パラメータ化されたバージョンの abstractclass3 とすべての実際の型パラメータを取得します。

65bee58535616

以上がジェネリッククラスまたはインターフェイスの実装クラスに関連してJavaのすべての実際の型を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。