パッケージ org.springframework.util

クラス ReflectionUtils

java.lang.ObjectSE
org.springframework.util.ReflectionUtils

public abstract class ReflectionUtils extends ObjectSE
リフレクション API を操作してリフレクション例外を処理するためのシンプルなユーティリティクラス

内部使用のみを目的としています。

導入:
1.2.2
作成者:
Juergen Hoeller, Rob Harrop, Rod Johnson, Costin Leau, Sam Brannen, Chris Beams
  • フィールドの詳細

    • USER_DECLARED_METHODS

      public static final ReflectionUtils.MethodFilter USER_DECLARED_METHODS
      java.lang.Object で宣言されていないすべての非ブリッジ非合成メソッドに一致するビルド済みの ReflectionUtils.MethodFilter
      導入:
      3.0.5
    • COPYABLE_FIELDS

      public static final ReflectionUtils.FieldFilter COPYABLE_FIELDS
      すべての非静的、非 final フィールドに一致する事前作成済みの FieldFilter。
  • コンストラクターの詳細

    • ReflectionUtils

      public ReflectionUtils()
  • メソッドの詳細

    • handleReflectionException

      public static void handleReflectionException(ExceptionSE ex)
      指定されたリフレクション例外を処理します。

      チェックされた例外がターゲットメソッドによってスローされることが予期されていない場合、またはメソッドまたはフィールドへのアクセス中にエラーが発生した場合にのみ呼び出す必要があります。

      このような根本原因を持つ InvocationTargetException の場合、基になる RuntimeException またはエラーをスローします。適切なメッセージを含む IllegalStateException またはそれ以外の場合は UndeclaredThrowableException をスローします。

      パラメーター:
      ex - 処理するリフレクション例外
    • handleInvocationTargetException

      public static void handleInvocationTargetException(InvocationTargetExceptionSE ex)
      指定された呼び出しターゲット例外を処理します。チェックされた例外がターゲットメソッドによってスローされることが予期されていない場合にのみ呼び出す必要があります。

      そのような根本原因の場合、基になる RuntimeException またはエラーをスローします。そうでない場合は、UndeclaredThrowableException をスローします。

      パラメーター:
      ex - 処理する呼び出しターゲット例外
    • rethrowRuntimeException

      public static void rethrowRuntimeException(@Nullable ThrowableSE ex)
      おそらく InvocationTargetExceptionSEターゲット例外である、指定された exceptionSE を再スローします。チェックされた例外がターゲットメソッドによってスローされることが予期されていない場合にのみ呼び出す必要があります。

      必要に応じて、RuntimeExceptionSE または ErrorSE への基になる例外キャストを再スローします。そうでなければ、UndeclaredThrowableExceptionSE をスローします。

      パラメーター:
      ex - 再スローの例外
      例外:
      RuntimeExceptionSE - 再スローされた例外
    • rethrowException

      public static void rethrowException(@Nullable ThrowableSE throwable) throws ExceptionSE
      おそらく InvocationTargetExceptionSEターゲット例外である、指定された exceptionSE を再スローします。チェックされた例外がターゲットメソッドによってスローされることが予期されていない場合にのみ呼び出す必要があります。

      必要に応じて、基になる例外を ExceptionSE または ErrorSE にキャストし直します。そうでなければ、UndeclaredThrowableExceptionSE をスローします。

      パラメーター:
      throwable - 再スローの例外
      例外:
      ExceptionSE - 再スローされた例外 (チェック済み例外の場合)
    • accessibleConstructor

      public static <T> ConstructorSE<T> accessibleConstructor(ClassSE<T> clazz, ClassSE<?>... parameterTypes) throws NoSuchMethodExceptionSE
      指定されたクラスとパラメーターのアクセス可能なコンストラクターを取得します。
      パラメーター:
      clazz - チェックするクラズ
      parameterTypes - 目的のコンストラクターのパラメーター型
      戻り値:
      コンストラクター参照
      例外:
      NoSuchMethodExceptionSE - そのようなコンストラクターが存在しない場合
      導入:
      5.0
    • makeAccessible

      public static void makeAccessible(ConstructorSE<?> ctor)
      指定されたコンストラクターをアクセス可能にし、必要に応じて明示的にアクセス可能に設定します。setAccessible(true) メソッドは、不必要な競合を避けるために、実際に必要な場合にのみ呼び出されます。
      パラメーター:
      ctor - アクセス可能にするコンストラクター
      関連事項:
    • findMethod

      @Nullable public static MethodSE findMethod(ClassSE<?> clazz, StringSE name)
      指定された名前でパラメーターなしで、指定されたクラスで MethodSE を見つけようとします。Object までのすべてのスーパークラスを検索します。

      MethodSE が見つからない場合、null を返します。

      パラメーター:
      clazz - 内省するクラス
      name - メソッドの名前
      戻り値:
      Method オブジェクト。見つからない場合は null 
    • findMethod

      @Nullable public static MethodSE findMethod(ClassSE<?> clazz, StringSE name, @Nullable ClassSE<?>... paramTypes)
      指定された名前とパラメーター型で、指定されたクラスで MethodSE を見つけようとします。Object までのすべてのスーパークラスを検索します。

      MethodSE が見つからない場合、null を返します。

      パラメーター:
      clazz - 内省するクラス
      name - メソッドの名前
      paramTypes - メソッドのパラメーター型 (署名を示す null の場合があります)
      戻り値:
      Method オブジェクト。見つからない場合は null 
    • invokeMethod

      @Nullable public static ObjectSE invokeMethod(MethodSE method, @Nullable ObjectSE target)
      引数なしで指定されたターゲットオブジェクトに対して指定された MethodSE を呼び出します。静的 MethodSE を呼び出す場合、ターゲットオブジェクトは null になります。

      スローされた例外は、handleReflectionException(java.lang.Exception) の呼び出しを介して処理されます。

      パラメーター:
      method - 呼び出すメソッド
      target - メソッドを呼び出すターゲットオブジェクト
      戻り値:
      呼び出し結果(ある場合)
      関連事項:
    • invokeMethod

      @Nullable public static ObjectSE invokeMethod(MethodSE method, @Nullable ObjectSE target, @Nullable ObjectSE... args)
      指定された引数を使用して、指定されたターゲットオブジェクトに対して指定された MethodSE を呼び出します。静的 MethodSE を呼び出す場合、ターゲットオブジェクトは null になります。

      スローされた例外は、handleReflectionException(java.lang.Exception) の呼び出しを介して処理されます。

      パラメーター:
      method - 呼び出すメソッド
      target - メソッドを呼び出すターゲットオブジェクト
      args - 呼び出し引数 (null の場合があります)
      戻り値:
      呼び出し結果(ある場合)
    • declaresException

      public static boolean declaresException(MethodSE method, ClassSE<?> exceptionType)
      指定されたメソッドが指定された例外を明示的に宣言するか、そのスーパークラスの 1 つを明示的に宣言するかを決定します。つまり、その型の例外はリフレクション呼び出し内でそのまま伝播できます。
      パラメーター:
      method - 宣言メソッド
      exceptionType - スローする例外
      戻り値:
      例外をそのままスローできる場合は truefalse (ラップする必要がある場合)
    • doWithLocalMethods

      public static void doWithLocalMethods(ClassSE<?> clazz, ReflectionUtils.MethodCallback mc)
      指定されたクラスのすべての一致するメソッドに対して、ローカルに宣言されたメソッドまたはそれに相当するメソッド(指定されたクラスが実装する Java 8 ベースのインターフェースのデフォルトメソッドなど)で指定されたコールバック操作を実行します。
      パラメーター:
      clazz - 内省するクラス
      mc - 各メソッドに対して呼び出すコールバック
      例外:
      IllegalStateExceptionSE - イントロスペクションが失敗した場合
      導入:
      4.2
      関連事項:
    • doWithMethods

      public static void doWithMethods(ClassSE<?> clazz, ReflectionUtils.MethodCallback mc)
      指定されたクラスとスーパークラスのすべての一致するメソッドで指定されたコールバック操作を実行します。

      ReflectionUtils.MethodFilter によって除外されない限り、サブクラスとスーパークラスで発生する同じ名前のメソッドが 2 回表示されます。

      パラメーター:
      clazz - 内省するクラス
      mc - 各メソッドに対して呼び出すコールバック
      例外:
      IllegalStateExceptionSE - イントロスペクションが失敗した場合
      関連事項:
    • doWithMethods

      public static void doWithMethods(ClassSE<?> clazz, ReflectionUtils.MethodCallback mc, @Nullable ReflectionUtils.MethodFilter mf)
      指定されたクラスとスーパークラス(または指定されたインターフェースとスーパーインターフェース)のすべての一致するメソッドで、指定されたコールバック操作を実行します。

      指定された ReflectionUtils.MethodFilter によって除外されない限り、サブクラスとスーパークラスで発生する同じ名前のメソッドが 2 回表示されます。

      パラメーター:
      clazz - 内省するクラス
      mc - 各メソッドに対して呼び出すコールバック
      mf - コールバックを適用するメソッドを決定するフィルター
      例外:
      IllegalStateExceptionSE - イントロスペクションが失敗した場合
    • getAllDeclaredMethods

      public static MethodSE[] getAllDeclaredMethods(ClassSE<?> leafClass)
      リーフクラスおよびすべてのスーパークラスで宣言されたすべてのメソッドを取得します。リーフクラスメソッドが最初に含まれます。
      パラメーター:
      leafClass - 内省するクラス
      例外:
      IllegalStateExceptionSE - イントロスペクションが失敗した場合
    • getUniqueDeclaredMethods

      public static MethodSE[] getUniqueDeclaredMethods(ClassSE<?> leafClass)
      リーフクラスおよびすべてのスーパークラスで宣言されたメソッドの一意のセットを取得します。リーフクラスメソッドが最初に含まれ、スーパークラス階層を走査するときに、すでに含まれているメソッドと一致するシグネチャーで見つかったメソッドはすべて除外されます。
      パラメーター:
      leafClass - 内省するクラス
      例外:
      IllegalStateExceptionSE - イントロスペクションが失敗した場合
    • getUniqueDeclaredMethods

      public static MethodSE[] getUniqueDeclaredMethods(ClassSE<?> leafClass, @Nullable ReflectionUtils.MethodFilter mf)
      リーフクラスおよびすべてのスーパークラスで宣言されたメソッドの一意のセットを取得します。リーフクラスメソッドが最初に含まれ、スーパークラス階層を走査するときに、すでに含まれているメソッドと一致するシグネチャーで見つかったメソッドはすべて除外されます。
      パラメーター:
      leafClass - 内省するクラス
      mf - 考慮する方法を決定するフィルター
      例外:
      IllegalStateExceptionSE - イントロスペクションが失敗した場合
      導入:
      5.2
    • getDeclaredMethods

      public static MethodSE[] getDeclaredMethods(ClassSE<?> clazz)
      新しいメソッドインスタンスを回避するためにローカルキャッシュを使用する Class.getDeclaredMethods() のバリアント。さらに、ローカルに実装されたインターフェースからの Java 8 デフォルトメソッドも含まれています。
      パラメーター:
      clazz - 内省するクラス
      戻り値:
      メソッドのキャッシュされた配列
      例外:
      IllegalStateExceptionSE - イントロスペクションが失敗した場合
      導入:
      5.2
      関連事項:
    • isEqualsMethod

      public static boolean isEqualsMethod(@Nullable MethodSE method)
      指定されたメソッドが「等しい」メソッドであるかどうかを判別します。
      関連事項:
    • isHashCodeMethod

      public static boolean isHashCodeMethod(@Nullable MethodSE method)
      指定されたメソッドが "hashCode" メソッドであるかどうかを判別します。
      関連事項:
    • isToStringMethod

      public static boolean isToStringMethod(@Nullable MethodSE method)
      指定されたメソッドが "toString" メソッドであるかどうかを判別します。
      関連事項:
    • isObjectMethod

      public static boolean isObjectMethod(@Nullable MethodSE method)
      指定されたメソッドが元々 ObjectSE によって宣言されているかどうかを判別します。
    • isCglibRenamedMethod

      public static boolean isCglibRenamedMethod(MethodSE renamedMethod)
      パターン "CGLIB$methodName$0" に従って、指定されたメソッドが CGLIB の「名前変更済み」メソッドであるかどうかを判別します。
      パラメーター:
      renamedMethod - チェックする方法
    • makeAccessible

      public static void makeAccessible(MethodSE method)
      指定されたメソッドをアクセス可能にし、必要に応じて明示的にアクセス可能に設定します。setAccessible(true) メソッドは、不必要な競合を避けるために、実際に必要な場合にのみ呼び出されます。
      パラメーター:
      method - アクセス可能にする方法
      関連事項:
    • findField

      @Nullable public static FieldSE findField(ClassSE<?> clazz, StringSE name)
      提供された name を使用して、提供された ClassSEfieldSE を見つけようとします。ObjectSE までのすべてのスーパークラスを検索します。
      パラメーター:
      clazz - 内省するクラス
      name - フィールドの名前
      戻り値:
      対応する Field オブジェクト、または見つからない場合は null 
    • findField

      @Nullable public static FieldSE findField(ClassSE<?> clazz, @Nullable StringSE name, @Nullable ClassSE<?> type)
      提供された name および / または typeSE を使用して、提供された ClassSEfieldSE を見つけようとします。ObjectSE までのすべてのスーパークラスを検索します。
      パラメーター:
      clazz - 内省するクラス
      name - フィールドの名前 (型が指定されている場合、null になる場合があります)
      type - フィールドの型 (名前が指定されている場合は null になる場合があります)
      戻り値:
      対応する Field オブジェクト、または見つからない場合は null 
    • findFieldIgnoreCase

      @Nullable public static FieldSE findFieldIgnoreCase(ClassSE<?> clazz, StringSE name)
      提供された name を使用して、提供された ClassSEfieldSE を見つけようとします。ObjectSE までのすべてのスーパークラスを検索します。
      パラメーター:
      clazz - 内省するクラス
      name - フィールドの名前 (大文字 / 小文字は無視されます)
      戻り値:
      対応する Field オブジェクト、または見つからない場合は null 
      導入:
      6.1
    • setField

      public static void setField(FieldSE field, @Nullable ObjectSE target, @Nullable ObjectSE value)
      指定されたターゲットオブジェクトSE上の指定されたフィールドオブジェクトSEによって表されるフィールドを、指定された value に設定します。

      Field.set(Object, Object)SE のセマンティクスに従って、基礎となるフィールドにプリミティブ型がある場合、新しい値は自動的にラップ解除されます。

      このメソッドは、static final フィールドの設定をサポートしていません。

      スローされた例外は、handleReflectionException(Exception) の呼び出しを介して処理されます。

      パラメーター:
      field - 設定するフィールド
      target - フィールドを設定する対象オブジェクト (または静的フィールドの場合は null )
      value - 設定する値 (null の場合があります)
    • getField

      @Nullable public static ObjectSE getField(FieldSE field, @Nullable ObjectSE target)
      指定された target objectSE で提供された field objectSE によって表されるフィールドを取得します。Field.get(Object)SE のセマンティクスに従って、基になるフィールドにプリミティブ型がある場合、戻り値は自動的にラップされます。

      スローされた例外は、handleReflectionException(Exception) の呼び出しを介して処理されます。

      パラメーター:
      field - 取得するフィールド
      target - フィールドを取得するターゲットオブジェクト (または静的フィールドの場合は null )
      戻り値:
      フィールドの現在の値
    • doWithLocalFields

      public static void doWithLocalFields(ClassSE<?> clazz, ReflectionUtils.FieldCallback fc)
      指定されたクラスでローカルに宣言されたすべてのフィールドで指定されたコールバックを呼び出します。
      パラメーター:
      clazz - 分析するターゲットクラス
      fc - 各フィールドに対して呼び出すコールバック
      例外:
      IllegalStateExceptionSE - イントロスペクションが失敗した場合
      導入:
      4.2
      関連事項:
    • doWithFields

      public static void doWithFields(ClassSE<?> clazz, ReflectionUtils.FieldCallback fc)
      ターゲットクラスのすべてのフィールドで指定されたコールバックを呼び出し、クラス階層を上ってすべての宣言されたフィールドを取得します。
      パラメーター:
      clazz - 分析するターゲットクラス
      fc - 各フィールドに対して呼び出すコールバック
      例外:
      IllegalStateExceptionSE - イントロスペクションが失敗した場合
    • doWithFields

      public static void doWithFields(ClassSE<?> clazz, ReflectionUtils.FieldCallback fc, @Nullable ReflectionUtils.FieldFilter ff)
      ターゲットクラスのすべてのフィールドで指定されたコールバックを呼び出し、クラス階層を上ってすべての宣言されたフィールドを取得します。
      パラメーター:
      clazz - 分析するターゲットクラス
      fc - 各フィールドに対して呼び出すコールバック
      ff - コールバックを適用するフィールドを決定するフィルター
      例外:
      IllegalStateExceptionSE - イントロスペクションが失敗した場合
    • shallowCopyFieldState

      public static void shallowCopyFieldState(ObjectSE src, ObjectSE dest)
      送信元オブジェクトと送信先(同じクラスまたはサブクラスでなければならない)を指定して、継承されたフィールドを含むすべてのフィールドをコピーします。引数なしの public コンストラクターを持つオブジェクトで動作するように設計されています。
      例外:
      IllegalStateExceptionSE - イントロスペクションが失敗した場合
    • isPublicStaticFinal

      public static boolean isPublicStaticFinal(FieldSE field)
      指定されたフィールドが "public static final" 定数かどうかを判別します。
      パラメーター:
      field - チェックするフィールド
    • makeAccessible

      public static void makeAccessible(FieldSE field)
      指定されたフィールドをアクセス可能にし、必要に応じて明示的にアクセス可能に設定します。setAccessible(true) メソッドは、不必要な競合を避けるために、実際に必要な場合にのみ呼び出されます。
      パラメーター:
      field - アクセス可能にするフィールド
      関連事項:
    • clearCache

      public static void clearCache()
      内部メソッド / フィールドキャッシュをクリアします。
      導入:
      4.2.4