Javaにおける汎用関連インタフェースのParameterizedType

1463 ワード

この文書を読む前に、Javaの汎用性をグローバルに認識するために、次の3つの文書を読むことができます.
  • Javaにおける汎用関連インタフェースの用語定義
  • Javaにおける汎用関連インタフェースの概要
  • Typeおよびそのサブインタフェースの由来
  • 概要
    ParameterizedTypeはTypeのサブインタフェースであり、Collection、Mapなどのパラメータのあるタイプを表す.しかし,実装上ParameterizedTypeはCollectionやMapなどを直接表すのではなく,CollectionやMapなどの具体的なタイプを表す.見覚えがあるのではないでしょうか.実はこれが私たちがよく言っている汎用型です.ParameterizedTypeは汎用的なインスタンスを表していますが、ParameterizedTypeを「汎用インスタンス」と呼びましょう.
    汎用P(例:Collection)を作成すると、Pインスタンス化された汎用タイプ宣言(例:Collection)が解析され、Pのすべての汎用パラメータ(例:String)が再帰的に作成されます.
    このインタフェースを実装する「クラス」は、「汎用タイプ」(Collectionなど)宣言が同じで、「タイプパラメータ」(Stringなど)も同じ2つの「クラス」を同等にするequals()メソッドを実装する必要があります.
    Type[] getActualTypeArguments()
    「汎用インスタンス」<>の「汎用変数」(タイプパラメータとも呼ばれる)の値を取得します.この値はタイプです.複数の「汎用変数」(Mapなど)がある可能性があるため、Type[]を返します.
    注意:<>に何層の<>ネストがあるかにかかわらず、この方法は最外層の<>を外すだけで、その後の残りの内容はこの方法の戻り値として扱われるため、その戻り値のタイプは不確定である.
    栗を煮る:
  • List a1;//ArrayList、Classタイプ
  • を返します.
  • List> a2;//ArrayList、ParameterizedTypeタイプ
  • を返します.
  • List a3;//Tを返し、TypeVariableタイプ
  • List extends Number> a4;//は、? extends Number、WildcardTypeタイプ
  • を返します.
  • List[]> a5;//ArrayList[]を返します.GenericArrayTypeタイプ
  • Type getRawType()
    最外層<>の前のタイプ、すなわちMapのMapを返します.
    Type getOwnerType()
    このタイプの所有者のタイプを取得します.これは主にネスト定義の内部クラス、例えばjava.util.Map.EntryにとってgetownerTypeメソッドを呼び出すとinterface java.util.Mapが返されます.
    現在のクラスが内部クラスではなく最上位クラスである場合、getownerTypeメソッドはnullを返します.
    1