public abstract class ReflectionUtils extends ObjectSE
内部使用のみを目的としています。
修飾子と型 | クラスと説明 |
---|---|
static interface | ReflectionUtils.FieldCallback 階層内の各フィールドで呼び出されるコールバックインターフェース。 |
static interface | ReflectionUtils.FieldFilter オプションでフィールドコールバックによって操作されるフィールドをフィルターするために使用されるコールバック。 |
static interface | ReflectionUtils.MethodCallback 各メソッドで実行するアクション。 |
static interface | ReflectionUtils.MethodFilter オプションでメソッドコールバックによって操作されるメソッドをフィルターするために使用されるコールバック。 |
修飾子と型 | フィールドと説明 |
---|---|
static ReflectionUtils.FieldFilter | COPYABLE_FIELDS すべての非静的、非 final フィールドに一致する事前作成済みの FieldFilter。 |
static ReflectionUtils.MethodFilter | USER_DECLARED_METHODS java.lang.Object で宣言されていないすべての非ブリッジ非合成メソッドに一致する事前作成済み MethodFilter。 |
コンストラクターと説明 |
---|
ReflectionUtils() |
修飾子と型 | メソッドと説明 |
---|---|
static <T> ConstructorSE<T> | accessibleConstructor(ClassSE<T> clazz, ClassSE<?>... parameterTypes) 指定されたクラスとパラメーターのアクセス可能なコンストラクターを取得します。 |
static void | clearCache() 内部メソッド / フィールドキャッシュをクリアします。 |
static boolean | declaresException(MethodSE method, ClassSE<?> exceptionType) 指定されたメソッドが指定された例外を明示的に宣言するか、そのスーパークラスの 1 つを明示的に宣言するかを決定します。つまり、その型の例外はリフレクション呼び出し内でそのまま伝播できます。 |
static void | doWithFields(ClassSE<?> clazz, ReflectionUtils.FieldCallback fc) ターゲットクラスのすべてのフィールドで指定されたコールバックを呼び出し、クラス階層を上ってすべての宣言されたフィールドを取得します。 |
static void | doWithFields(ClassSE<?> clazz, ReflectionUtils.FieldCallback fc, ReflectionUtils.FieldFilter ff) ターゲットクラスのすべてのフィールドで指定されたコールバックを呼び出し、クラス階層を上ってすべての宣言されたフィールドを取得します。 |
static void | doWithLocalFields(ClassSE<?> clazz, ReflectionUtils.FieldCallback fc) 指定されたクラスでローカルに宣言されたすべてのフィールドで指定されたコールバックを呼び出します。 |
static void | doWithLocalMethods(ClassSE<?> clazz, ReflectionUtils.MethodCallback mc) 指定されたクラスのすべての一致するメソッドに対して、ローカルに宣言されたメソッドまたはそれに相当するメソッド(指定されたクラスが実装する Java 8 ベースのインターフェースのデフォルトメソッドなど)で指定されたコールバック操作を実行します。 |
static void | doWithMethods(ClassSE<?> clazz, ReflectionUtils.MethodCallback mc) 指定されたクラスとスーパークラスのすべての一致するメソッドで指定されたコールバック操作を実行します。 |
static void | doWithMethods(ClassSE<?> clazz, ReflectionUtils.MethodCallback mc, ReflectionUtils.MethodFilter mf) 指定されたクラスとスーパークラス(または指定されたインターフェースとスーパーインターフェース)のすべての一致するメソッドで、指定されたコールバック操作を実行します。 |
static FieldSE | findField(ClassSE<?> clazz, StringSE name) |
static FieldSE | findField(ClassSE<?> clazz, StringSE name, ClassSE<?> type) |
static MethodSE | findMethod(ClassSE<?> clazz, StringSE name) 指定された名前でパラメーターなしで、指定されたクラスで Method SE を見つけようとします。 |
static MethodSE | findMethod(ClassSE<?> clazz, StringSE name, ClassSE<?>... paramTypes) 指定された名前とパラメーター型で、指定されたクラスで Method SE を見つけようとします。 |
static MethodSE[] | getAllDeclaredMethods(ClassSE<?> leafClass) リーフクラスおよびすべてのスーパークラスで宣言されたすべてのメソッドを取得します。 |
static MethodSE[] | getDeclaredMethods(ClassSE<?> clazz) JVM の SecurityManager チェックと新しい Method インスタンスを回避するためにローカルキャッシュを使用する Class.getDeclaredMethods() SE のバリアント。 |
static ObjectSE | getField(FieldSE field, ObjectSE target) 指定された target object SE で提供された field object SE によって表されるフィールドを取得します。 |
static MethodSE[] | getUniqueDeclaredMethods(ClassSE<?> leafClass) リーフクラスおよびすべてのスーパークラスで宣言されたメソッドの一意のセットを取得します。 |
static MethodSE[] | getUniqueDeclaredMethods(ClassSE<?> leafClass, ReflectionUtils.MethodFilter mf) リーフクラスおよびすべてのスーパークラスで宣言されたメソッドの一意のセットを取得します。 |
static void | handleInvocationTargetException(InvocationTargetExceptionSE ex) 指定された呼び出しターゲット例外を処理します。 |
static void | handleReflectionException(ExceptionSE ex) 指定されたリフレクション例外を処理します。 |
static ObjectSE | invokeMethod(MethodSE method, ObjectSE target) 引数なしで指定されたターゲットオブジェクトに対して指定された Method SE を呼び出します。 |
static ObjectSE | invokeMethod(MethodSE method, ObjectSE target, ObjectSE... args) 指定された引数を使用して、指定されたターゲットオブジェクトに対して指定された Method SE を呼び出します。 |
static boolean | isCglibRenamedMethod(MethodSE renamedMethod) パターン "CGLIB$methodName$0" に従って、指定されたメソッドが CGLIB の「名前変更済み」メソッドであるかどうかを判別します。 |
static boolean | isEqualsMethod(MethodSE method) 指定されたメソッドが「等しい」メソッドであるかどうかを判別します。 |
static boolean | isHashCodeMethod(MethodSE method) 指定されたメソッドが "hashCode" メソッドであるかどうかを判断します。 |
static boolean | isObjectMethod(MethodSE method) 指定されたメソッドが元々 Object SE によって宣言されているかどうかを判別します。 |
static boolean | isPublicStaticFinal(FieldSE field) 指定されたフィールドが "public static final" 定数かどうかを判別します。 |
static boolean | isToStringMethod(MethodSE method) 指定されたメソッドが "toString" メソッドであるかどうかを判断します。 |
static void | makeAccessible(ConstructorSE<?> ctor) 指定されたコンストラクターをアクセス可能にし、必要に応じて明示的にアクセス可能に設定します。 |
static void | makeAccessible(FieldSE field) 指定されたフィールドをアクセス可能にし、必要に応じて明示的にアクセス可能に設定します。 |
static void | makeAccessible(MethodSE method) 指定されたメソッドをアクセス可能にし、必要に応じて明示的にアクセス可能に設定します。 |
static void | rethrowException(ThrowableSE ex) おそらく InvocationTargetException SE のターゲット例外である、指定された exception SE を再スローします。 |
static void | rethrowRuntimeException(ThrowableSE ex) おそらく InvocationTargetException SE のターゲット例外である、指定された exception SE を再スローします。 |
static void | setField(FieldSE field, ObjectSE target, ObjectSE value) |
static void | shallowCopyFieldState(ObjectSE src, ObjectSE dest) 送信元オブジェクトと送信先(同じクラスまたはサブクラスでなければならない)を指定して、継承されたフィールドを含むすべてのフィールドをコピーします。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public static final ReflectionUtils.MethodFilter USER_DECLARED_METHODS
java.lang.Object
で宣言されていないすべての非ブリッジ非合成メソッドに一致する事前作成済み MethodFilter。public static final ReflectionUtils.FieldFilter COPYABLE_FIELDS
public static void handleReflectionException(ExceptionSE ex)
チェックされた例外がターゲットメソッドによってスローされることが予期されていない場合、またはメソッドまたはフィールドへのアクセス中にエラーが発生した場合にのみ呼び出す必要があります。
このような根本原因を持つ InvocationTargetException の場合、基になる RuntimeException またはエラーをスローします。適切なメッセージを含む IllegalStateException またはそれ以外の場合は UndeclaredThrowableException をスローします。
ex
- 処理するリフレクション例外 public static void handleInvocationTargetException(InvocationTargetExceptionSE ex)
そのような根本原因の場合、基になる RuntimeException またはエラーをスローします。そうでない場合は、UndeclaredThrowableException をスローします。
ex
- 処理する呼び出しターゲット例外 public static void rethrowRuntimeException(ThrowableSE ex)
InvocationTargetException
SE のターゲット例外である、指定された exception
SE を再スローします。チェックされた例外がターゲットメソッドによってスローされることが予期されていない場合にのみ呼び出す必要があります。 必要に応じて、RuntimeException
SE または Error
SE への基になる例外キャストを再スローします。そうでなければ、UndeclaredThrowableException
SE をスローします。
ex
- 再スローの例外 RuntimeExceptionSE
- 再スローされた例外 public static void rethrowException(ThrowableSE ex) throws ExceptionSE
InvocationTargetException
SE のターゲット例外である、指定された exception
SE を再スローします。チェックされた例外がターゲットメソッドによってスローされることが予期されていない場合にのみ呼び出す必要があります。 必要に応じて、基になる例外を Exception
SE または Error
SE にキャストし直します。そうでなければ、UndeclaredThrowableException
SE をスローします。
ex
- 再スローの例外 ExceptionSE
- 再スローされた例外 (チェック済み例外の場合)public static <T> ConstructorSE<T> accessibleConstructor(ClassSE<T> clazz, ClassSE<?>... parameterTypes) throws NoSuchMethodExceptionSE
clazz
- チェックするクラズ parameterTypes
- 目的のコンストラクターのパラメーター型 NoSuchMethodExceptionSE
- そのようなコンストラクターが存在しない場合 public static void makeAccessible(ConstructorSE<?> ctor)
setAccessible(true)
メソッドは、実際に必要な場合にのみ呼び出され、JVM SecurityManager(アクティブな場合)との不必要な競合を回避します。ctor
- アクセス可能にするコンストラクター AccessibleObject.setAccessible(java.lang.reflect.AccessibleObject[], boolean)
SE@Nullable public static MethodSE findMethod(ClassSE<?> clazz, StringSE name)
Method
SE を見つけようとします。Object
までのすべてのスーパークラスを検索します。Method
SE が見つからない場合、null
を返します。
clazz
- イントロスペクトするクラス name
- メソッドの名前 null
@Nullable public static MethodSE findMethod(ClassSE<?> clazz, StringSE name, @Nullable ClassSE<?>... paramTypes)
Method
SE を見つけようとします。Object
までのすべてのスーパークラスを検索します。Method
SE が見つからない場合、null
を返します。
clazz
- イントロスペクトするクラス name
- メソッドの名前 paramTypes
- メソッドのパラメーター型 (署名を示す null
の場合があります)null
@Nullable public static ObjectSE invokeMethod(MethodSE method, @Nullable ObjectSE target)
Method
SE を呼び出します。静的 Method
SE を呼び出す場合、ターゲットオブジェクトは null
になります。 スローされた例外は、handleReflectionException(java.lang.Exception)
の呼び出しを介して処理されます。
method
- 呼び出すメソッド target
- メソッドを呼び出すターゲットオブジェクト invokeMethod(java.lang.reflect.Method, Object, Object[])
@Nullable public static ObjectSE invokeMethod(MethodSE method, @Nullable ObjectSE target, @Nullable ObjectSE... args)
Method
SE を呼び出します。静的 Method
SE を呼び出す場合、ターゲットオブジェクトは null
になります。 スローされた例外は、handleReflectionException(java.lang.Exception)
の呼び出しを介して処理されます。
method
- 呼び出すメソッド target
- メソッドを呼び出すターゲットオブジェクト args
- 呼び出し引数 (null
の場合があります)public static boolean declaresException(MethodSE method, ClassSE<?> exceptionType)
method
- 宣言メソッド exceptionType
- スローする例外 true
。false
(ラップする必要がある場合)public static void doWithLocalMethods(ClassSE<?> clazz, ReflectionUtils.MethodCallback mc)
clazz
- イントロスペクトするクラス mc
- 各メソッドに対して呼び出すコールバック IllegalStateExceptionSE
- イントロスペクションが失敗した場合 doWithMethods(java.lang.Class<?>, org.springframework.util.ReflectionUtils.MethodCallback)
public static void doWithMethods(ClassSE<?> clazz, ReflectionUtils.MethodCallback mc)
ReflectionUtils.MethodFilter
によって除外されない限り、サブクラスとスーパークラスで発生する同じ名前のメソッドが 2 回表示されます。
clazz
- イントロスペクトするクラス mc
- 各メソッドに対して呼び出すコールバック IllegalStateExceptionSE
- イントロスペクションが失敗した場合 doWithMethods(Class, MethodCallback, MethodFilter)
public static void doWithMethods(ClassSE<?> clazz, ReflectionUtils.MethodCallback mc, @Nullable ReflectionUtils.MethodFilter mf)
指定された ReflectionUtils.MethodFilter
によって除外されない限り、サブクラスとスーパークラスで発生する同じ名前のメソッドが 2 回表示されます。
clazz
- イントロスペクトするクラス mc
- 各メソッドに対して呼び出すコールバック mf
- コールバックを適用するメソッドを決定するフィルター IllegalStateExceptionSE
- イントロスペクションが失敗した場合 public static MethodSE[] getAllDeclaredMethods(ClassSE<?> leafClass)
leafClass
- イントロスペクトするクラス IllegalStateExceptionSE
- イントロスペクションが失敗した場合 public static MethodSE[] getUniqueDeclaredMethods(ClassSE<?> leafClass)
leafClass
- イントロスペクトするクラス IllegalStateExceptionSE
- イントロスペクションが失敗した場合 public static MethodSE[] getUniqueDeclaredMethods(ClassSE<?> leafClass, @Nullable ReflectionUtils.MethodFilter mf)
leafClass
- イントロスペクトするクラス mf
- 考慮する方法を決定するフィルター IllegalStateExceptionSE
- イントロスペクションが失敗した場合 public static MethodSE[] getDeclaredMethods(ClassSE<?> clazz)
Class.getDeclaredMethods()
SE のバリアント。さらに、ローカルに実装されたインターフェースからの Java 8 デフォルトメソッドも含まれます。これらは、宣言されたメソッドのように効果的に処理されるためです。clazz
- イントロスペクトするクラス IllegalStateExceptionSE
- イントロスペクションが失敗した場合 Class.getDeclaredMethods()
SEpublic static boolean isEqualsMethod(@Nullable MethodSE method)
public static boolean isHashCodeMethod(@Nullable MethodSE method)
Object.hashCode()
SEpublic static boolean isToStringMethod(@Nullable MethodSE method)
Object.toString()
SEpublic static boolean isObjectMethod(@Nullable MethodSE method)
Object
SE によって宣言されているかどうかを判別します。public static boolean isCglibRenamedMethod(MethodSE renamedMethod)
renamedMethod
- チェックする方法 public static void makeAccessible(MethodSE method)
setAccessible(true)
メソッドは、実際に必要な場合にのみ呼び出され、JVM SecurityManager(アクティブな場合)との不必要な競合を回避します。method
- アクセス可能にする方法 AccessibleObject.setAccessible(java.lang.reflect.AccessibleObject[], boolean)
SE@Nullable public static FieldSE findField(ClassSE<?> clazz, StringSE name)
clazz
- イントロスペクトするクラス name
- フィールドの名前 null
@Nullable public static FieldSE findField(ClassSE<?> clazz, @Nullable StringSE name, @Nullable ClassSE<?> type)
clazz
- イントロスペクトするクラス name
- フィールドの名前 (型が指定されている場合、null
になる場合があります)type
- フィールドの型 (名前が指定されている場合は null
になる場合があります)null
public static void setField(FieldSE field, @Nullable ObjectSE target, @Nullable ObjectSE value)
value
に設定します。Field.set(Object, Object)
SE のセマンティクスに従って、基礎となるフィールドにプリミティブ型がある場合、新しい値は自動的にラップ解除されます。
このメソッドは、static final
フィールドの設定をサポートしていません。
スローされた例外は、handleReflectionException(Exception)
の呼び出しを介して処理されます。
field
- 設定するフィールド target
- フィールドを設定する対象オブジェクト value
- 設定する値 (null
の場合があります)@Nullable public static ObjectSE getField(FieldSE field, @Nullable ObjectSE target)
target object
SE で提供された field object
SE によって表されるフィールドを取得します。Field.get(Object)
SE のセマンティクスに従って、基になるフィールドにプリミティブ型がある場合、戻り値は自動的にラップされます。 スローされた例外は、handleReflectionException(Exception)
の呼び出しを介して処理されます。
field
- 取得するフィールド target
- フィールドを取得するターゲットオブジェクト public static void doWithLocalFields(ClassSE<?> clazz, ReflectionUtils.FieldCallback fc)
clazz
- 分析するターゲットクラス fc
- 各フィールドに対して呼び出すコールバック IllegalStateExceptionSE
- イントロスペクションが失敗した場合 doWithFields(java.lang.Class<?>, org.springframework.util.ReflectionUtils.FieldCallback)
public static void doWithFields(ClassSE<?> clazz, ReflectionUtils.FieldCallback fc)
clazz
- 分析するターゲットクラス fc
- 各フィールドに対して呼び出すコールバック IllegalStateExceptionSE
- イントロスペクションが失敗した場合 public static void doWithFields(ClassSE<?> clazz, ReflectionUtils.FieldCallback fc, @Nullable ReflectionUtils.FieldFilter ff)
clazz
- 分析するターゲットクラス fc
- 各フィールドに対して呼び出すコールバック ff
- コールバックを適用するフィールドを決定するフィルター IllegalStateExceptionSE
- イントロスペクションが失敗した場合 public static void shallowCopyFieldState(ObjectSE src, ObjectSE dest)
IllegalStateExceptionSE
- イントロスペクションが失敗した場合 public static boolean isPublicStaticFinal(FieldSE field)
field
- チェックするフィールド public static void makeAccessible(FieldSE field)
setAccessible(true)
メソッドは、実際に必要な場合にのみ呼び出され、JVM SecurityManager(アクティブな場合)との不必要な競合を回避します。field
- アクセス可能にするフィールド AccessibleObject.setAccessible(java.lang.reflect.AccessibleObject[], boolean)
SEpublic static void clearCache()