public class GenericsUtil extends Object
Genericsを扱うためのユーティリティクラス。| コンストラクタと説明 |
|---|
GenericsUtil() |
| 修飾子とタイプ | メソッドと説明 |
|---|---|
protected static <T> boolean |
checkInterfaceAncestors(Class<T> genericClass,
List<ParameterizedType> ancestorTypeList,
Class clazz)
インタフェース型から型パラメータを宣言したクラスまでの
ParameterizedTypeのリストを取得する。 |
protected static <T> boolean |
checkParameterizedType(Type type,
Class<T> genericClass,
List<ParameterizedType> ancestorTypeList)
Type型をチェックし、ParameterizedType
かつ、型パラメータを宣言したクラスのサブクラスである場合、リストに追加する。 |
protected static <T> List<ParameterizedType> |
getAncestorTypeList(Class<T> genericClass,
Class<? extends T> descendantClass)
特定の型から型パラメータを宣言したクラスまでの
ParameterizedTypeのリストを取得する。 |
protected static Class |
getRawClass(Type type)
引数
typeの実際の型を返却する。 |
protected static boolean |
isNotTypeVariable(Type type)
引数
typeがClass型
であるか、TypeVariable型かを判定する。 |
static <T> Class[] |
resolveParameterizedClass(Class<T> genericClass,
Class<? extends T> descendantClass)
クラスの型パラメータの実際の型を取得する。
|
static <T> Class |
resolveParameterizedClass(Class<T> genericClass,
Class<? extends T> descendantClass,
int index)
型パラメータの実際の型を取得する。
|
protected static Class |
resolveTypeVariable(Type type,
List<ParameterizedType> ancestorTypeList)
型パラメータの具体的な
Typeを取得する。 |
public static <T> Class[] resolveParameterizedClass(Class<T> genericClass, Class<? extends T> descendantClass) throws IllegalArgumentException, IllegalStateException
WildCardTypeが
指定されている場合、および、コード中で変数宣言の際に実際の型が
指定されている場合は取得できない。
public class Descendant extends Generic<String, Integer> {
...
}
この場合、正しく[String, Integer]の
配列が取得できる
public class Descendant extends Generic<String[], Integer> {
...
}
この場合、正しく[String[], Integer]の
配列が取得できる
public class Descendant
extends Generic<String[], Map<String, Object>> {
...
}
この場合、正しく[String[], Map]の
配列が取得できる
public class Descendant<P, Q> extends Generic<S, T> {
...
}
public class Descendant<P extends String, Q super Bean>
extends Generic<S, T> {
...
}
Generic<String, Integer> descendant =
new Generic<String, Integer>();
genericTypeからdescendantClassまで
多世代の継承がある場合も、実際の型を取得することができる。
public class Child<S, T> extends Generic<S, T> {
...
}
public class GrandChild<S, T> extends Child<S, T> {
...
}
public class Descendant extends GrandChild<String, Integer> {
...
}
この場合、正しく[String, Integer]の
配列が取得できる
genericTypeからdescendantClassまでの
継承の過程で型パラメータの順番が入れ替わった場合でも、
genercClassで宣言された順番で実際の型を取得できる。
public class Generic<S, T> {
...
}
public class Child<A, T, B, S> extends Generic<S, T> {
...
}
public class Descendant
extends Generic<Boolean, Integer, Double, String> {
...
}
この場合、正しく[String, Integer]の
配列が取得できる
T - 型パラメータ宣言をしたクラスの型。genericClass - 型パラメータ宣言をしたクラス。descendantClass - genericsClassを継承し、
具体的な型パラメータを指定したクラス。Classインスタンスの配列。
順番はgenercClassで宣言された順番である。IllegalArgumentException - 引数genericClassが
nullの場合。
引数descendantClassがnullの場合。IllegalStateException - descendantClassの実装で型パラメータが
具体クラスとして指定されていない場合。
引数genercClassが型パラメータを宣言したクラスでは
なかった場合。public static <T> Class resolveParameterizedClass(Class<T> genericClass, Class<? extends T> descendantClass, int index) throws IllegalArgumentException, IllegalStateException
WildCardTypeが
指定されている場合、および、コード中で変数宣言の際に実際の型が
指定されている場合は取得できない。
public class Descendant extends Generic<String, Integer> {
...
}
この場合、正しくStringまたはIntegerが
取得できる
public class Descendant extends Generic<String[], Integer> {
...
}
この場合、正しくString[]またはIntegerが
取得できる
public class Descendant
extends Generic<String[], Map<String, Object>> {
...
}
この場合、正しくString[]またはMap
が取得できる
public class Descendant<P, Q> extends Generic<S, T> {
...
}
public class Descendant<P extends String, Q super Bean>
extends Generic<S, T> {
...
}
Generic<String, Integer> descendant =
new Generic<String, Integer>();
genericTypeからdescendantClassまで
多世代の継承がある場合も、実際の型を取得することができる。
public class Child<S, T> extends Generic<S, T> {
...
}
public class GrandChild<S, T> extends Child<S, T> {
...
}
public class Descendant extends GrandChild<String, Integer> {
...
}
この場合、正しくStringまたはInteger
が取得できる
genericTypeからdescendantClassまでの
継承の過程で型パラメータの順番が入れ替わった場合でも、
genercClassで宣言された順番で実際の型を取得できる。
public class Generic<S, T> {
...
}
public class Child<A, T, B, S> extends Generic<S, T> {
...
}
public class Descendant
extends Generic<Boolean, Integer, Double, String> {
...
}
この場合、正しくStringまたはInteger
が取得できる
T - 型パラメータ宣言をしたクラスの型。genericClass - 型パラメータ宣言をしたクラス。descendantClass - genericsClassを継承し、
具体的な型パラメータを指定したクラス。index - 実際の型を取得する型パラメータの宣言順序。Classインスタンス。IllegalArgumentException - 引数genericClassが
nullの場合。
引数descendantClassがnullの場合。
引数indexが0より小さい、または、
宣言された型パラメータ数以上の場合。IllegalStateException - descendantClassの実装で型パラメータが
具体クラスとして指定されていない場合。
引数genercClassが型パラメータを宣言したクラスでは
なかった場合。protected static <T> List<ParameterizedType> getAncestorTypeList(Class<T> genericClass, Class<? extends T> descendantClass) throws IllegalStateException
ParameterizedTypeのリストを取得する。T - 型パラメータ宣言をしたクラスの型。genericClass - 型パラメータ宣言をしたクラス。descendantClass - genericsClassを継承し、
具体的な型パラメータを指定したクラス。ParameterizedTypeのリスト。IllegalStateException - descendantClassの
実装で型パラメータが具体クラスとして指定されていない場合。
引数genercClassが型パラメータを宣言したクラスでは
なかった場合。protected static <T> boolean checkInterfaceAncestors(Class<T> genericClass, List<ParameterizedType> ancestorTypeList, Class clazz)
ParameterizedTypeのリストを取得する。T - 型パラメータを宣言したクラスの型。genericClass - 型パラメータを宣言したクラス。ancestorTypeList - ParameterizedTypeを
追加するリスト。clazz - 検査対象のインタフェース型。true。
見つからなかった場合はfalse。protected static <T> boolean checkParameterizedType(Type type, Class<T> genericClass, List<ParameterizedType> ancestorTypeList)
Type型をチェックし、ParameterizedType
かつ、型パラメータを宣言したクラスのサブクラスである場合、リストに追加する。T - 型パラメータを宣言したクラスの型。type - 検査対象の型。genericClass - 型パラメータを宣言したクラス。ancestorTypeList - ParameterizedTypeを
追加するリスト。typeが型パラメータを宣言したクラスと同じクラスの場合。protected static Class resolveTypeVariable(Type type, List<ParameterizedType> ancestorTypeList) throws IllegalStateException
Typeを取得する。type - 解決する必要のあるTypeインスタンス。ancestorTypeList - typeの具体的な型が
宣言されている可能性のあるParameterizedTypeのリスト。IllegalStateException - 引数typeが
Class型、および、
TypeVariable型ではない場合。
引数typeがメソッド、
または、コンストラクタで宣言されている場合。
引数typeの実際の型がClassではない
(ワイルドカード、配列)場合。protected static boolean isNotTypeVariable(Type type) throws IllegalStateException
typeがClass型
であるか、TypeVariable型かを判定する。type - Typeインスタンス。typeが
Class, ParameterizedType, GenericArrayTypeの場合
true。
引数typeがTypeVariableの場合
false。IllegalStateException - 引数typeが
Class、ParameterizedType、
GenericArrayType、TypeVariableの
いずれでもない場合。protected static Class getRawClass(Type type) throws IllegalStateException
typeの実際の型を返却する。type - Typeインスタンス。Classインスタンス。IllegalStateException - 引数typeが
Class、ParameterizedType、
GenericArrayTypeのいずれでもない場合。Copyright © 2014. All Rights Reserved.