|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Objectjp.terasoluna.fw.util.GenericsUtil
public class GenericsUtil
Genericsを扱うためのユーティリティクラス。
| フィールドの概要 | |
|---|---|
private static org.apache.commons.logging.Log |
log
ログクラス。 |
| コンストラクタの概要 | |
|---|---|
GenericsUtil()
|
|
| メソッドの概要 | ||
|---|---|---|
protected static
|
checkInterfaceAncestors(java.lang.Class<T> genericClass,
java.util.List<java.lang.reflect.ParameterizedType> ancestorTypeList,
java.lang.Class clazz)
インタフェース型から型パラメータを宣言したクラスまでの ParameterizedTypeのリストを取得する。 |
|
protected static
|
checkParameterizedType(java.lang.reflect.Type type,
java.lang.Class<T> genericClass,
java.util.List<java.lang.reflect.ParameterizedType> ancestorTypeList)
Type型をチェックし、ParameterizedType
かつ、型パラメータを宣言したクラスのサブクラスである場合、リストに追加する。 |
|
protected static
|
getAncestorTypeList(java.lang.Class<T> genericClass,
java.lang.Class<? extends T> descendantClass)
特定の型から型パラメータを宣言したクラスまでの ParameterizedTypeのリストを取得する。 |
|
protected static java.lang.Class |
getRawClass(java.lang.reflect.Type type)
引数 typeの実際の型を返却する。 |
|
protected static boolean |
isNotTypeVariable(java.lang.reflect.Type type)
引数 typeがClass型
であるか、TypeVariable型かを判定する。 |
|
static
|
resolveParameterizedClass(java.lang.Class<T> genericClass,
java.lang.Class<? extends T> descendantClass)
クラスの型パラメータの実際の型を取得する。 |
|
static
|
resolveParameterizedClass(java.lang.Class<T> genericClass,
java.lang.Class<? extends T> descendantClass,
int index)
型パラメータの実際の型を取得する。 |
|
protected static java.lang.Class |
resolveTypeVariable(java.lang.reflect.Type type,
java.util.List<java.lang.reflect.ParameterizedType> ancestorTypeList)
型パラメータの具体的な Typeを取得する。 |
|
| クラス java.lang.Object から継承されたメソッド |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| フィールドの詳細 |
|---|
private static final org.apache.commons.logging.Log log
| コンストラクタの詳細 |
|---|
public GenericsUtil()
| メソッドの詳細 |
|---|
public static <T> java.lang.Class[] resolveParameterizedClass(java.lang.Class<T> genericClass,
java.lang.Class<? extends T> descendantClass)
throws java.lang.IllegalArgumentException,
java.lang.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で宣言された順番である。
java.lang.IllegalArgumentException - 引数genericClassが
nullの場合。
引数descendantClassがnullの場合。
java.lang.IllegalStateException - descendantClassの実装で型パラメータが
具体クラスとして指定されていない場合。
引数genercClassが型パラメータを宣言したクラスでは
なかった場合。
public static <T> java.lang.Class resolveParameterizedClass(java.lang.Class<T> genericClass,
java.lang.Class<? extends T> descendantClass,
int index)
throws java.lang.IllegalArgumentException,
java.lang.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インスタンス。
java.lang.IllegalArgumentException - 引数genericClassが
nullの場合。
引数descendantClassがnullの場合。
引数indexが0より小さい、または、
宣言された型パラメータ数以上の場合。
java.lang.IllegalStateException - descendantClassの実装で型パラメータが
具体クラスとして指定されていない場合。
引数genercClassが型パラメータを宣言したクラスでは
なかった場合。
protected static <T> java.util.List<java.lang.reflect.ParameterizedType> getAncestorTypeList(java.lang.Class<T> genericClass,
java.lang.Class<? extends T> descendantClass)
throws java.lang.IllegalStateException
ParameterizedTypeのリストを取得する。
T - 型パラメータ宣言をしたクラスの型。genericClass - 型パラメータ宣言をしたクラス。descendantClass - genericsClassを継承し、
具体的な型パラメータを指定したクラス。
ParameterizedTypeのリスト。
java.lang.IllegalStateException - descendantClassの
実装で型パラメータが具体クラスとして指定されていない場合。
引数genercClassが型パラメータを宣言したクラスでは
なかった場合。
protected static <T> boolean checkInterfaceAncestors(java.lang.Class<T> genericClass,
java.util.List<java.lang.reflect.ParameterizedType> ancestorTypeList,
java.lang.Class clazz)
ParameterizedTypeのリストを取得する。
T - 型パラメータを宣言したクラスの型。genericClass - 型パラメータを宣言したクラス。ancestorTypeList - ParameterizedTypeを
追加するリスト。clazz - 検査対象のインタフェース型。
true。
見つからなかった場合はfalse。
protected static <T> boolean checkParameterizedType(java.lang.reflect.Type type,
java.lang.Class<T> genericClass,
java.util.List<java.lang.reflect.ParameterizedType> ancestorTypeList)
Type型をチェックし、ParameterizedType
かつ、型パラメータを宣言したクラスのサブクラスである場合、リストに追加する。
T - 型パラメータを宣言したクラスの型。type - 検査対象の型。genericClass - 型パラメータを宣言したクラス。ancestorTypeList - ParameterizedTypeを
追加するリスト。
typeが型パラメータを宣言したクラスと同じクラスの場合。
protected static java.lang.Class resolveTypeVariable(java.lang.reflect.Type type,
java.util.List<java.lang.reflect.ParameterizedType> ancestorTypeList)
throws java.lang.IllegalStateException
Typeを取得する。
type - 解決する必要のあるTypeインスタンス。ancestorTypeList - typeの具体的な型が
宣言されている可能性のあるParameterizedTypeのリスト。
java.lang.IllegalStateException - 引数typeが
Class型、および、
TypeVariable型ではない場合。
引数typeがメソッド、
または、コンストラクタで宣言されている場合。
引数typeの実際の型がClassではない
(ワイルドカード、配列)場合。
protected static boolean isNotTypeVariable(java.lang.reflect.Type type)
throws java.lang.IllegalStateException
typeがClass型
であるか、TypeVariable型かを判定する。
type - Typeインスタンス。
typeが
Class, ParameterizedType, GenericArrayTypeの場合
true。
引数typeがTypeVariableの場合
false。
java.lang.IllegalStateException - 引数typeが
Class、ParameterizedType、
GenericArrayType、TypeVariableの
いずれでもない場合。
protected static java.lang.Class getRawClass(java.lang.reflect.Type type)
throws java.lang.IllegalStateException
typeの実際の型を返却する。
type - Typeインスタンス。
Classインスタンス。
java.lang.IllegalStateException - 引数typeが
Class、ParameterizedType、
GenericArrayTypeのいずれでもない場合。
|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||