|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Objectjp.terasoluna.fw.util.GenericsUtil
public class GenericsUtil
Genericsを扱うためのユーティリティクラス。
| コンストラクタの概要 | |
|---|---|
GenericsUtil()
|
|
| メソッドの概要 | ||
|---|---|---|
protected static
|
checkInterfaceAncestors(Class<T> genericClass,
List<ParameterizedType> ancestorTypeList,
Class clazz)
インタフェース型から型パラメータを宣言したクラスまでの ParameterizedTypeのリストを取得する。 |
|
protected static
|
checkParameterizedType(Type type,
Class<T> genericClass,
List<ParameterizedType> ancestorTypeList)
Type型をチェックし、ParameterizedType
かつ、型パラメータを宣言したクラスのサブクラスである場合、リストに追加する。 |
|
protected static
|
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
|
resolveParameterizedClass(Class<T> genericClass,
Class<? extends T> descendantClass)
クラスの型パラメータの実際の型を取得する。 |
|
static
|
resolveParameterizedClass(Class<T> genericClass,
Class<? extends T> descendantClass,
int index)
型パラメータの実際の型を取得する。 |
|
protected static Class |
resolveTypeVariable(Type type,
List<ParameterizedType> ancestorTypeList)
型パラメータの具体的な Typeを取得する。 |
|
| クラス java.lang.Object から継承されたメソッド |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| コンストラクタの詳細 |
|---|
public GenericsUtil()
| メソッドの詳細 |
|---|
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のいずれでもない場合。
|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||