Class MethodMatcher

java.lang.Object
org.miaixz.bus.core.lang.reflect.method.MethodMatcher

public class MethodMatcher extends Object
方法匹配器工具类,用于基于各种预设条件创建方法匹配器。
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    allMatch(Predicate<Method>... matchers)
    用于组合多个方法匹配器的方法匹配器,当所有方法匹配器均匹配成功时才认为方法匹配。
    anyMatch(Predicate<Method>... matchers)
    用于组合多个方法匹配器的方法匹配器,当任意方法匹配器匹配成功时即认为方法匹配。
    用于获得指定属性的getter方法的匹配器 查找方法名为get + 首字母大写的属性名的无参数方法; 查找方法名为属性名的无参数方法; 若fieldTypebooleanBoolean,则同时查找方法名为is + 首字母大写的属性的无参数方法;
    forGetterMethod(String fieldName, Class<?> fieldType)
    用于获得指定属性的getter方法的匹配器 查找方法名为get + 首字母大写的属性名的无参数方法; 查找方法名为属性名的无参数方法; 若fieldTypebooleanBoolean,则同时查找方法名为is + 首字母大写的属性的无参数方法;
    用于匹配方法签名的方法匹配器,检查的内容包括: 方法名是否完全一致; 返回值类型是否匹配,允许返回值类型为方法返回值类型的子类; 参数类型是否匹配,允许参数类型为方法参数类型的子类;
    forMethodSignature(String methodName, Class<?> returnType, Class<?>... parameterTypes)
    用于匹配方法签名的方法匹配器,检查的内容包括: 方法名是否完全一致; 返回值类型是否匹配,允许返回值类型为方法返回值类型的子类,若返回值类型为null则表示匹配无返回值的方法; 参数类型是否匹配,允许参数类型为方法参数类型的子类,若参数类型为null则表示匹配无参数的方法;
    forModifiers(int... modifiers)
    用于具有指定修饰符的方法的方法匹配器。
    forMostSpecificParameterTypes(Class<?>... parameterTypes)
    用于匹配指定参数类型的方法的方法匹配器,与forParameterTypes(java.lang.Class<?>...)不同的是,该方法仅用于尽量可能最匹配的方法 若参数为空,则表示匹配无参数方法; 若参数不为空: 仅匹配parameterTypes中不为null的参数类型,若参数类型为null则表示匹配任意类型的参数; 若N为parameterTypes长度,则仅要求parameterTypes不为null的类型与方法前N个参数类型匹配即可; 若parameterTypes长度大于参数列表长度,则直接返回false; 比如: 若存在三参数方法method(String, Integer, Object),支持以下匹配: forMostSpecificParameterTypes(CharSequence.class, Number.class, Object.class) forMostSpecificParameterTypes(String.class, Integer.class, Object.class) forMostSpecificParameterTypes(String.class, Integer.class, null) forMostSpecificParameterTypes(String.class, null, null) forMostSpecificParameterTypes(null, null, null) forMostSpecificParameterTypes(String.class, Integer.class) forMostSpecificParameterTypes(String.class)
    用于匹配指定参数类型的方法的方法匹配器,与forParameterTypes(java.lang.Class<?>...)不同的是,该方法仅用于尽量可能最匹配的方法 若参数为空,则表示匹配无参数方法; 若参数不为空: 仅匹配parameterTypes中不为null的参数类型,若参数类型为null则表示匹配任意类型的参数; 若N为parameterTypes长度,则仅要求parameterTypes不为null的类型与方法前N个参数类型匹配即可; 若parameterTypes长度大于参数列表长度,则直接返回false; 比如: 若存在三参数方法method(String, Integer, Object),支持以下匹配: forMostSpecificParameterTypes(String.class, Integer.class, Object.class) forMostSpecificParameterTypes(String.class, Integer.class, null) forMostSpecificParameterTypes(String.class, null, null) forMostSpecificParameterTypes(null, null, null) forMostSpecificParameterTypes(String.class, Integer.class) forMostSpecificParameterTypes(String.class)
    forName(String methodName)
    用于根据方法名匹配方法的方法匹配器。
    forNameAndParameterTypes(String methodName, Class<?>... parameterTypes)
    用于同时匹配方法名和参数类型的方法匹配器,其中,参数类型匹配时允许参数类型为方法参数类型的子类。
    forNameAndStrictParameterTypes(String methodName, Class<?>... parameterTypes)
    用于同时匹配方法名和参数类型的方法匹配器,其中,参数类型匹配时要求参数类型与方法参数类型完全一致。
    用于根据方法名匹配方法的方法匹配器,忽略方法名大小写。
    forNameIgnoreCaseAndParameterTypes(String methodName, Class<?>... parameterTypes)
    用于同时匹配方法名和参数类型的方法匹配器,其中,参数类型匹配时允许参数类型为方法参数类型的子类,且方法名忽略大小写。
    forNameIgnoreCaseAndStrictParameterTypes(String methodName, Class<?>... parameterTypes)
    用于同时匹配方法名和参数类型的方法匹配器,其中,参数类型匹配时要求参数类型与方法参数类型完全一致,且方法名忽略大小写。
    用于匹配无参数方法的方法匹配器。
    用于匹配无返回值的方法的方法匹配器。
    forParameterCount(int count)
    用于匹配指定参数个数的方法的方法匹配器。
    forParameterTypes(Class<?>... parameterTypes)
    用于匹配指定参数类型的方法的方法匹配器,只要参数类型可以赋值给方法参数类型即认为匹配成功。 比如:参数类型为ArrayList,则方法参数类型可以为ListCollection等。
    forReturnType(Class<?> returnType)
    用于匹配指定参数类型的方法的方法匹配器,只要参数类型可以赋值给方法参数类型。
    用于获得指定属性的setter方法的匹配器,默认查找方法名为set + 首字母大写的属性的单参数方法。 查找方法名为set + 首字母大写的属性名的单参数方法; 查找方法名为属性名的单参数方法;
    forSetterMethod(String fieldName, Class<?> fieldType)
    用于获得指定属性的setter方法的匹配器,默认查找方法名为set + 首字母大写的属性的单参数方法。 查找方法名为set + 首字母大写的属性名的单参数方法; 查找方法名为属性名的单参数方法;
    用于匹配方法签名的方法匹配器,检查的内容包括: 方法名是否完全一致; 返回值类型是否匹配,要求返回值类型与方法返回值类型完全一致; 参数类型是否匹配,要求参数类型与方法参数类型完全一致;
    forStrictMethodSignature(String methodName, Class<?> returnType, Class<?>... parameterTypes)
    用于匹配方法签名的方法匹配器,检查的内容包括: 方法名是否完全一致; 返回值类型是否匹配,要求返回值类型与方法返回值类型完全一致,若返回值类型为null则表示匹配无返回值的方法; 参数类型是否匹配,要求参数类型与方法参数类型完全一致,若参数类型为null则表示匹配无参数的方法;
    forStrictParameterTypes(Class<?>... parameterTypes)
    用于匹配指定参数类型的方法的方法匹配器,只有参数类型完全匹配才认为匹配成功
    forStrictReturnType(Class<?> returnType)
    用于匹配指定返回值类型的方法的方法匹配器,要求返回值类型与指定类型完全一致。
    hasAnnotation(Class<? extends Annotation> annotationType)
    用于匹配被指定注解标注、或注解层级结构中存在指定注解的方法的方法匹配器。 比如:指定注解为 @Annotation,则匹配: 被@Annotation标注的方法; 被带有@Annotation注解的派生注解标注的方法;
    hasAnnotationOnDeclaringClass(Class<? extends Annotation> annotationType)
    用于匹配声明方法的类的层级接口中,存在任意类被指定注解标注、或注解层级结构中存在指定注解的方法的方法匹配器。 比如:指定注解为 @Annotation,则匹配: 声明方法的类被@Annotation标注的方法; 声明方法的类被带有@Annotation注解的派生注解标注的方法;
    用于匹配方法本身或声明方法的类上,直接被指定注解标注、或注解层级结构中存在指定注解的方法的方法匹配器。 比如:指定注解为 @Annotation,则匹配: 被@Annotation标注的方法; 被带有@Annotation注解的派生注解标注的方法; 声明方法的类被@Annotation标注的方法; 声明方法的类被带有@Annotation注解的派生注解标注的方法;
    hasDeclaredAnnotation(Class<? extends Annotation> annotationType)
    用于匹配被指定注解标注、或注解层级结构中存在指定注解的方法的方法匹配器。 比如:指定注解为 @Annotation,则匹配直接被@Annotation标注的方法。
    用于匹配共有方法的方法匹配器。
    用于匹配公共静态方法的方法匹配器。
    用于匹配静态方法的方法匹配器。
    noneMatch(Predicate<Method>... matchers)
    用于组合多个方法匹配器的方法匹配器,仅当所有方法匹配器均匹配失败时才认为方法匹配。

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • MethodMatcher

      public MethodMatcher()
  • Method Details

    • noneMatch

      @SafeVarargs public static Predicate<Method> noneMatch(Predicate<Method>... matchers)
      用于组合多个方法匹配器的方法匹配器,仅当所有方法匹配器均匹配失败时才认为方法匹配。
      Parameters:
      matchers - 方法匹配器
      Returns:
      方法匹配器
      See Also:
    • anyMatch

      @SafeVarargs public static Predicate<Method> anyMatch(Predicate<Method>... matchers)
      用于组合多个方法匹配器的方法匹配器,当任意方法匹配器匹配成功时即认为方法匹配。
      Parameters:
      matchers - 方法匹配器
      Returns:
      方法匹配器
      See Also:
    • allMatch

      @SafeVarargs public static Predicate<Method> allMatch(Predicate<Method>... matchers)
      用于组合多个方法匹配器的方法匹配器,当所有方法匹配器均匹配成功时才认为方法匹配。
      Parameters:
      matchers - 方法匹配器
      Returns:
      方法匹配器
      See Also:
    • isPublic

      public static Predicate<Method> isPublic()
      用于匹配共有方法的方法匹配器。
      Returns:
      方法匹配器
    • isStatic

      public static Predicate<Method> isStatic()
      用于匹配静态方法的方法匹配器。
      Returns:
      方法匹配器
    • isPublicStatic

      public static Predicate<Method> isPublicStatic()

      用于匹配公共静态方法的方法匹配器。

      Returns:
      方法匹配器
    • forModifiers

      public static Predicate<Method> forModifiers(int... modifiers)
      用于具有指定修饰符的方法的方法匹配器。
      Parameters:
      modifiers - 修饰符
      Returns:
      方法匹配器
    • hasDeclaredAnnotation

      public static Predicate<Method> hasDeclaredAnnotation(Class<? extends Annotation> annotationType)
      用于匹配被指定注解标注、或注解层级结构中存在指定注解的方法的方法匹配器。 比如:指定注解为 @Annotation,则匹配直接被@Annotation标注的方法。
      Parameters:
      annotationType - 注解类型
      Returns:
      方法匹配器
      See Also:
    • hasAnnotation

      public static Predicate<Method> hasAnnotation(Class<? extends Annotation> annotationType)
      用于匹配被指定注解标注、或注解层级结构中存在指定注解的方法的方法匹配器。 比如:指定注解为 @Annotation,则匹配:
      • @Annotation标注的方法;
      • 被带有@Annotation注解的派生注解标注的方法;
      Parameters:
      annotationType - 注解类型
      Returns:
      方法匹配器
      See Also:
    • hasAnnotationOnDeclaringClass

      public static Predicate<Method> hasAnnotationOnDeclaringClass(Class<? extends Annotation> annotationType)
      用于匹配声明方法的类的层级接口中,存在任意类被指定注解标注、或注解层级结构中存在指定注解的方法的方法匹配器。 比如:指定注解为 @Annotation,则匹配:
      • 声明方法的类被@Annotation标注的方法;
      • 声明方法的类被带有@Annotation注解的派生注解标注的方法;
      Parameters:
      annotationType - 注解类型
      Returns:
      方法匹配器
      See Also:
    • hasAnnotationOnMethodOrDeclaringClass

      public static Predicate<Method> hasAnnotationOnMethodOrDeclaringClass(Class<? extends Annotation> annotationType)
      用于匹配方法本身或声明方法的类上,直接被指定注解标注、或注解层级结构中存在指定注解的方法的方法匹配器。 比如:指定注解为 @Annotation,则匹配:
      • @Annotation标注的方法;
      • 被带有@Annotation注解的派生注解标注的方法;
      • 声明方法的类被@Annotation标注的方法;
      • 声明方法的类被带有@Annotation注解的派生注解标注的方法;
      Parameters:
      annotationType - 注解类型
      Returns:
      方法匹配器
    • forGetterMethod

      public static Predicate<Method> forGetterMethod(String fieldName, Class<?> fieldType)
      用于获得指定属性的getter方法的匹配器
      • 查找方法名为get + 首字母大写的属性名的无参数方法;
      • 查找方法名为属性名的无参数方法;
      • fieldTypebooleanBoolean,则同时查找方法名为is + 首字母大写的属性的无参数方法;
      Parameters:
      fieldName - 属性名
      fieldType - 属性类型
      Returns:
      方法匹配器
    • forGetterMethod

      public static Predicate<Method> forGetterMethod(Field field)
      用于获得指定属性的getter方法的匹配器
      • 查找方法名为get + 首字母大写的属性名的无参数方法;
      • 查找方法名为属性名的无参数方法;
      • fieldTypebooleanBoolean,则同时查找方法名为is + 首字母大写的属性的无参数方法;
      Parameters:
      field - 属性
      Returns:
      方法匹配器
    • forSetterMethod

      public static Predicate<Method> forSetterMethod(String fieldName, Class<?> fieldType)
      用于获得指定属性的setter方法的匹配器,默认查找方法名为set + 首字母大写的属性的单参数方法。
      • 查找方法名为set + 首字母大写的属性名的单参数方法;
      • 查找方法名为属性名的单参数方法;
      Parameters:
      fieldName - 属性名
      fieldType - 属性类型
      Returns:
      方法匹配器
    • forSetterMethod

      public static Predicate<Method> forSetterMethod(Field field)
      用于获得指定属性的setter方法的匹配器,默认查找方法名为set + 首字母大写的属性的单参数方法。
      • 查找方法名为set + 首字母大写的属性名的单参数方法;
      • 查找方法名为属性名的单参数方法;
      Parameters:
      field - 属性
      Returns:
      方法匹配器
    • forNameAndParameterTypes

      public static Predicate<Method> forNameAndParameterTypes(String methodName, Class<?>... parameterTypes)
      用于同时匹配方法名和参数类型的方法匹配器,其中,参数类型匹配时允许参数类型为方法参数类型的子类。
      Parameters:
      methodName - 方法名
      parameterTypes - 参数类型
      Returns:
      方法匹配器
    • forNameAndStrictParameterTypes

      public static Predicate<Method> forNameAndStrictParameterTypes(String methodName, Class<?>... parameterTypes)
      用于同时匹配方法名和参数类型的方法匹配器,其中,参数类型匹配时要求参数类型与方法参数类型完全一致。
      Parameters:
      methodName - 方法名
      parameterTypes - 参数类型
      Returns:
      方法匹配器
    • forNameIgnoreCaseAndParameterTypes

      public static Predicate<Method> forNameIgnoreCaseAndParameterTypes(String methodName, Class<?>... parameterTypes)
      用于同时匹配方法名和参数类型的方法匹配器,其中,参数类型匹配时允许参数类型为方法参数类型的子类,且方法名忽略大小写。
      Parameters:
      methodName - 方法名
      parameterTypes - 参数类型
      Returns:
      方法匹配器
    • forNameIgnoreCaseAndStrictParameterTypes

      public static Predicate<Method> forNameIgnoreCaseAndStrictParameterTypes(String methodName, Class<?>... parameterTypes)
      用于同时匹配方法名和参数类型的方法匹配器,其中,参数类型匹配时要求参数类型与方法参数类型完全一致,且方法名忽略大小写。
      Parameters:
      methodName - 方法名
      parameterTypes - 参数类型
      Returns:
      方法匹配器
    • forMethodSignature

      public static Predicate<Method> forMethodSignature(Method method)
      用于匹配方法签名的方法匹配器,检查的内容包括:
      • 方法名是否完全一致;
      • 返回值类型是否匹配,允许返回值类型为方法返回值类型的子类;
      • 参数类型是否匹配,允许参数类型为方法参数类型的子类;
      Parameters:
      method - 方法
      Returns:
      方法匹配器
    • forMethodSignature

      public static Predicate<Method> forMethodSignature(String methodName, Class<?> returnType, Class<?>... parameterTypes)
      用于匹配方法签名的方法匹配器,检查的内容包括:
      • 方法名是否完全一致;
      • 返回值类型是否匹配,允许返回值类型为方法返回值类型的子类,若返回值类型为null则表示匹配无返回值的方法;
      • 参数类型是否匹配,允许参数类型为方法参数类型的子类,若参数类型为null则表示匹配无参数的方法;
      Parameters:
      methodName - 方法名
      returnType - 返回值类型,若为null则表示匹配无返回值的方法
      parameterTypes - 参数类型,若为null则表示匹配无参数的方法
      Returns:
      方法匹配器
    • forStrictMethodSignature

      public static Predicate<Method> forStrictMethodSignature(String methodName, Class<?> returnType, Class<?>... parameterTypes)
      用于匹配方法签名的方法匹配器,检查的内容包括:
      • 方法名是否完全一致;
      • 返回值类型是否匹配,要求返回值类型与方法返回值类型完全一致,若返回值类型为null则表示匹配无返回值的方法;
      • 参数类型是否匹配,要求参数类型与方法参数类型完全一致,若参数类型为null则表示匹配无参数的方法;
      Parameters:
      methodName - 方法名
      returnType - 返回值类型,若为null则表示匹配无返回值的方法
      parameterTypes - 参数类型,若为null则表示匹配无参数的方法
      Returns:
      方法匹配器
    • forStrictMethodSignature

      public static Predicate<Method> forStrictMethodSignature(Method method)
      用于匹配方法签名的方法匹配器,检查的内容包括:
      • 方法名是否完全一致;
      • 返回值类型是否匹配,要求返回值类型与方法返回值类型完全一致;
      • 参数类型是否匹配,要求参数类型与方法参数类型完全一致;
      Parameters:
      method - 方法
      Returns:
      方法匹配器
    • forName

      public static Predicate<Method> forName(String methodName)
      用于根据方法名匹配方法的方法匹配器。
      Parameters:
      methodName - 方法名
      Returns:
      方法匹配器
    • forNameIgnoreCase

      public static Predicate<Method> forNameIgnoreCase(String methodName)
      用于根据方法名匹配方法的方法匹配器,忽略方法名大小写。
      Parameters:
      methodName - 方法名
      Returns:
      方法匹配器
    • forNoneReturnType

      public static Predicate<Method> forNoneReturnType()
      用于匹配无返回值的方法的方法匹配器。
      Returns:
      方法匹配器
    • forReturnType

      public static Predicate<Method> forReturnType(Class<?> returnType)
      用于匹配指定参数类型的方法的方法匹配器,只要参数类型可以赋值给方法参数类型。
      Parameters:
      returnType - 返回值类型
      Returns:
      方法匹配器
    • forStrictReturnType

      public static Predicate<Method> forStrictReturnType(Class<?> returnType)
      用于匹配指定返回值类型的方法的方法匹配器,要求返回值类型与指定类型完全一致。
      Parameters:
      returnType - 返回值类型
      Returns:
      方法匹配器
    • forNoneParameter

      public static Predicate<Method> forNoneParameter()
      用于匹配无参数方法的方法匹配器。
      Returns:
      方法匹配器
    • forParameterCount

      public static Predicate<Method> forParameterCount(int count)
      用于匹配指定参数个数的方法的方法匹配器。
      Parameters:
      count - 参数个数
      Returns:
      方法匹配器
    • forParameterTypes

      public static Predicate<Method> forParameterTypes(Class<?>... parameterTypes)
      用于匹配指定参数类型的方法的方法匹配器,只要参数类型可以赋值给方法参数类型即认为匹配成功。 比如:参数类型为ArrayList,则方法参数类型可以为ListCollection等。
      Parameters:
      parameterTypes - 参数类型
      Returns:
      方法匹配器
    • forMostSpecificParameterTypes

      public static Predicate<Method> forMostSpecificParameterTypes(Class<?>... parameterTypes)
      用于匹配指定参数类型的方法的方法匹配器,与forParameterTypes(java.lang.Class<?>...)不同的是,该方法仅用于尽量可能最匹配的方法
      • 若参数为空,则表示匹配无参数方法;
      • 若参数不为空:
        • 仅匹配parameterTypes中不为null的参数类型,若参数类型为null则表示匹配任意类型的参数;
        • 若N为parameterTypes长度,则仅要求parameterTypes不为null的类型与方法前N个参数类型匹配即可;
        • parameterTypes长度大于参数列表长度,则直接返回false
      比如: 若存在三参数方法method(String, Integer, Object),支持以下匹配:
      • forMostSpecificParameterTypes(CharSequence.class, Number.class, Object.class)
      • forMostSpecificParameterTypes(String.class, Integer.class, Object.class)
      • forMostSpecificParameterTypes(String.class, Integer.class, null)
      • forMostSpecificParameterTypes(String.class, null, null)
      • forMostSpecificParameterTypes(null, null, null)
      • forMostSpecificParameterTypes(String.class, Integer.class)
      • forMostSpecificParameterTypes(String.class)
      Parameters:
      parameterTypes - 参数类型
      Returns:
      方法匹配器
    • forMostSpecificStrictParameterTypes

      public static Predicate<Method> forMostSpecificStrictParameterTypes(Class<?>... parameterTypes)
      用于匹配指定参数类型的方法的方法匹配器,与forParameterTypes(java.lang.Class<?>...)不同的是,该方法仅用于尽量可能最匹配的方法
      • 若参数为空,则表示匹配无参数方法;
      • 若参数不为空:
        • 仅匹配parameterTypes中不为null的参数类型,若参数类型为null则表示匹配任意类型的参数;
        • 若N为parameterTypes长度,则仅要求parameterTypes不为null的类型与方法前N个参数类型匹配即可;
        • parameterTypes长度大于参数列表长度,则直接返回false
      比如: 若存在三参数方法method(String, Integer, Object),支持以下匹配:
      • forMostSpecificParameterTypes(String.class, Integer.class, Object.class)
      • forMostSpecificParameterTypes(String.class, Integer.class, null)
      • forMostSpecificParameterTypes(String.class, null, null)
      • forMostSpecificParameterTypes(null, null, null)
      • forMostSpecificParameterTypes(String.class, Integer.class)
      • forMostSpecificParameterTypes(String.class)
      Parameters:
      parameterTypes - 参数类型
      Returns:
      方法匹配器
    • forStrictParameterTypes

      public static Predicate<Method> forStrictParameterTypes(Class<?>... parameterTypes)
      用于匹配指定参数类型的方法的方法匹配器,只有参数类型完全匹配才认为匹配成功
      Parameters:
      parameterTypes - 参数类型
      Returns:
      方法匹配器