jp.terasoluna.fw.util
クラス GenericsUtil

java.lang.Object
  上位を拡張 jp.terasoluna.fw.util.GenericsUtil

public class GenericsUtil
extends java.lang.Object

Genericsを扱うためのユーティリティクラス。


フィールドの概要
private static org.apache.commons.logging.Log log
          ログクラス。
 
コンストラクタの概要
GenericsUtil()
           
 
メソッドの概要
protected static
<T> boolean
checkInterfaceAncestors(java.lang.Class<T> genericClass, java.util.List<java.lang.reflect.ParameterizedType> ancestorTypeList, java.lang.Class clazz)
          インタフェース型から型パラメータを宣言したクラスまでの ParameterizedTypeのリストを取得する。
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 かつ、型パラメータを宣言したクラスのサブクラスである場合、リストに追加する。
protected static
<T> java.util.List<java.lang.reflect.ParameterizedType>
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)
          引数typeClass型 であるか、TypeVariable型かを判定する。
static
<T> java.lang.Class[]
resolveParameterizedClass(java.lang.Class<T> genericClass, java.lang.Class<? extends T> descendantClass)
          クラスの型パラメータの実際の型を取得する。
static
<T> java.lang.Class
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
 

フィールドの詳細

log

private static final org.apache.commons.logging.Log log
ログクラス。

コンストラクタの詳細

GenericsUtil

public GenericsUtil()
メソッドの詳細

resolveParameterizedClass

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が 指定されている場合、および、コード中で変数宣言の際に実際の型が 指定されている場合は取得できない。

多世代継承の場合
genericTypeからdescendantClassまで 多世代の継承がある場合も、実際の型を取得することができる。

型パラメータの順番が変更された場合
genericTypeからdescendantClassまでの 継承の過程で型パラメータの順番が入れ替わった場合でも、 genercClassで宣言された順番で実際の型を取得できる。

型パラメータ:
T - 型パラメータ宣言をしたクラスの型。
パラメータ:
genericClass - 型パラメータ宣言をしたクラス。
descendantClass - genericsClassを継承し、 具体的な型パラメータを指定したクラス。
戻り値:
実際の型を表すClassインスタンスの配列。 順番はgenercClassで宣言された順番である。
例外:
java.lang.IllegalArgumentException - 引数genericClassnullの場合。 引数descendantClassnullの場合。
java.lang.IllegalStateException - descendantClassの実装で型パラメータが 具体クラスとして指定されていない場合。 引数genercClassが型パラメータを宣言したクラスでは なかった場合。

resolveParameterizedClass

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が 指定されている場合、および、コード中で変数宣言の際に実際の型が 指定されている場合は取得できない。

多世代継承の場合
genericTypeからdescendantClassまで 多世代の継承がある場合も、実際の型を取得することができる。

型パラメータの順番が変更された場合
genericTypeからdescendantClassまでの 継承の過程で型パラメータの順番が入れ替わった場合でも、 genercClassで宣言された順番で実際の型を取得できる。

型パラメータ:
T - 型パラメータ宣言をしたクラスの型。
パラメータ:
genericClass - 型パラメータ宣言をしたクラス。
descendantClass - genericsClassを継承し、 具体的な型パラメータを指定したクラス。
index - 実際の型を取得する型パラメータの宣言順序。
戻り値:
実際の型を表すClassインスタンス。
例外:
java.lang.IllegalArgumentException - 引数genericClassnullの場合。 引数descendantClassnullの場合。 引数index0より小さい、または、 宣言された型パラメータ数以上の場合。
java.lang.IllegalStateException - descendantClassの実装で型パラメータが 具体クラスとして指定されていない場合。 引数genercClassが型パラメータを宣言したクラスでは なかった場合。

getAncestorTypeList

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が型パラメータを宣言したクラスでは なかった場合。

checkInterfaceAncestors

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

checkParameterizedType

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が型パラメータを宣言したクラスと同じクラスの場合。

resolveTypeVariable

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 - 引数typeClass型、および、 TypeVariable型ではない場合。 引数typeがメソッド、 または、コンストラクタで宣言されている場合。 引数typeの実際の型がClassではない (ワイルドカード、配列)場合。

isNotTypeVariable

protected static boolean isNotTypeVariable(java.lang.reflect.Type type)
                                    throws java.lang.IllegalStateException
引数typeClass型 であるか、TypeVariable型かを判定する。

パラメータ:
type - Typeインスタンス。
戻り値:
引数typeClass, ParameterizedType, GenericArrayTypeの場合 true。 引数typeTypeVariableの場合 false
例外:
java.lang.IllegalStateException - 引数typeClassParameterizedTypeGenericArrayTypeTypeVariableの いずれでもない場合。

getRawClass

protected static java.lang.Class getRawClass(java.lang.reflect.Type type)
                                      throws java.lang.IllegalStateException
引数typeの実際の型を返却する。

パラメータ:
type - Typeインスタンス。
戻り値:
Classインスタンス。
例外:
java.lang.IllegalStateException - 引数typeClassParameterizedTypeGenericArrayTypeのいずれでもない場合。