Class MethodMatcher
java.lang.Object
org.miaixz.bus.core.lang.reflect.method.MethodMatcher
方法匹配器工具类,用于基于各种预设条件创建方法匹配器。
- Since:
- Java 17+
- Author:
- Kimi Liu
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription用于组合多个方法匹配器的方法匹配器,当所有方法匹配器均匹配成功时才认为方法匹配。用于组合多个方法匹配器的方法匹配器,当任意方法匹配器匹配成功时即认为方法匹配。forGetterMethod(Field field) 用于获得指定属性的getter方法的匹配器 查找方法名为get + 首字母大写的属性名的无参数方法; 查找方法名为属性名的无参数方法; 若fieldType为boolean或Boolean,则同时查找方法名为is + 首字母大写的属性的无参数方法;forGetterMethod(String fieldName, Class<?> fieldType) 用于获得指定属性的getter方法的匹配器 查找方法名为get + 首字母大写的属性名的无参数方法; 查找方法名为属性名的无参数方法; 若fieldType为boolean或Boolean,则同时查找方法名为is + 首字母大写的属性的无参数方法;forMethodSignature(Method method) 用于匹配方法签名的方法匹配器,检查的内容包括: 方法名是否完全一致; 返回值类型是否匹配,允许返回值类型为方法返回值类型的子类; 参数类型是否匹配,允许参数类型为方法参数类型的子类;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)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)用于根据方法名匹配方法的方法匹配器。forNameAndParameterTypes(String methodName, Class<?>... parameterTypes) 用于同时匹配方法名和参数类型的方法匹配器,其中,参数类型匹配时允许参数类型为方法参数类型的子类。forNameAndStrictParameterTypes(String methodName, Class<?>... parameterTypes) 用于同时匹配方法名和参数类型的方法匹配器,其中,参数类型匹配时要求参数类型与方法参数类型完全一致。forNameIgnoreCase(String methodName) 用于根据方法名匹配方法的方法匹配器,忽略方法名大小写。forNameIgnoreCaseAndParameterTypes(String methodName, Class<?>... parameterTypes) 用于同时匹配方法名和参数类型的方法匹配器,其中,参数类型匹配时允许参数类型为方法参数类型的子类,且方法名忽略大小写。forNameIgnoreCaseAndStrictParameterTypes(String methodName, Class<?>... parameterTypes) 用于同时匹配方法名和参数类型的方法匹配器,其中,参数类型匹配时要求参数类型与方法参数类型完全一致,且方法名忽略大小写。用于匹配无参数方法的方法匹配器。用于匹配无返回值的方法的方法匹配器。forParameterCount(int count) 用于匹配指定参数个数的方法的方法匹配器。forParameterTypes(Class<?>... parameterTypes) forReturnType(Class<?> returnType) 用于匹配指定参数类型的方法的方法匹配器,只要参数类型可以赋值给方法参数类型。forSetterMethod(Field field) 用于获得指定属性的setter方法的匹配器,默认查找方法名为set + 首字母大写的属性的单参数方法。 查找方法名为set + 首字母大写的属性名的单参数方法; 查找方法名为属性名的单参数方法;forSetterMethod(String fieldName, Class<?> fieldType) 用于获得指定属性的setter方法的匹配器,默认查找方法名为set + 首字母大写的属性的单参数方法。 查找方法名为set + 首字母大写的属性名的单参数方法; 查找方法名为属性名的单参数方法;forStrictMethodSignature(Method method) 用于匹配方法签名的方法匹配器,检查的内容包括: 方法名是否完全一致; 返回值类型是否匹配,要求返回值类型与方法返回值类型完全一致; 参数类型是否匹配,要求参数类型与方法参数类型完全一致;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注解的派生注解标注的方法;hasAnnotationOnMethodOrDeclaringClass(Class<? extends Annotation> annotationType) 用于匹配方法本身或声明方法的类上,直接被指定注解标注、或注解层级结构中存在指定注解的方法的方法匹配器。 比如:指定注解为@Annotation,则匹配: 被@Annotation标注的方法; 被带有@Annotation注解的派生注解标注的方法; 声明方法的类被@Annotation标注的方法; 声明方法的类被带有@Annotation注解的派生注解标注的方法;hasDeclaredAnnotation(Class<? extends Annotation> annotationType) 用于匹配被指定注解标注、或注解层级结构中存在指定注解的方法的方法匹配器。 比如:指定注解为@Annotation,则匹配直接被@Annotation标注的方法。isPublic()用于匹配共有方法的方法匹配器。用于匹配公共静态方法的方法匹配器。isStatic()用于匹配静态方法的方法匹配器。用于组合多个方法匹配器的方法匹配器,仅当所有方法匹配器均匹配失败时才认为方法匹配。
-
Constructor Details
-
MethodMatcher
public MethodMatcher()
-
-
Method Details
-
noneMatch
用于组合多个方法匹配器的方法匹配器,仅当所有方法匹配器均匹配失败时才认为方法匹配。- Parameters:
matchers- 方法匹配器- Returns:
- 方法匹配器
- See Also:
-
anyMatch
用于组合多个方法匹配器的方法匹配器,当任意方法匹配器匹配成功时即认为方法匹配。- Parameters:
matchers- 方法匹配器- Returns:
- 方法匹配器
- See Also:
-
allMatch
用于组合多个方法匹配器的方法匹配器,当所有方法匹配器均匹配成功时才认为方法匹配。- Parameters:
matchers- 方法匹配器- Returns:
- 方法匹配器
- See Also:
-
isPublic
用于匹配共有方法的方法匹配器。- Returns:
- 方法匹配器
-
isStatic
用于匹配静态方法的方法匹配器。- Returns:
- 方法匹配器
-
isPublicStatic
用于匹配公共静态方法的方法匹配器。
- Returns:
- 方法匹配器
-
forModifiers
用于具有指定修饰符的方法的方法匹配器。- Parameters:
modifiers- 修饰符- Returns:
- 方法匹配器
-
hasDeclaredAnnotation
用于匹配被指定注解标注、或注解层级结构中存在指定注解的方法的方法匹配器。 比如:指定注解为@Annotation,则匹配直接被@Annotation标注的方法。- Parameters:
annotationType- 注解类型- Returns:
- 方法匹配器
- See Also:
-
hasAnnotation
用于匹配被指定注解标注、或注解层级结构中存在指定注解的方法的方法匹配器。 比如:指定注解为@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
用于获得指定属性的getter方法的匹配器- 查找方法名为
get + 首字母大写的属性名的无参数方法; - 查找方法名为属性名的无参数方法;
- 若
fieldType为boolean或Boolean,则同时查找方法名为is + 首字母大写的属性的无参数方法;
- Parameters:
fieldName- 属性名fieldType- 属性类型- Returns:
- 方法匹配器
- 查找方法名为
-
forGetterMethod
用于获得指定属性的getter方法的匹配器- 查找方法名为
get + 首字母大写的属性名的无参数方法; - 查找方法名为属性名的无参数方法;
- 若
fieldType为boolean或Boolean,则同时查找方法名为is + 首字母大写的属性的无参数方法;
- Parameters:
field- 属性- Returns:
- 方法匹配器
- 查找方法名为
-
forSetterMethod
用于获得指定属性的setter方法的匹配器,默认查找方法名为set + 首字母大写的属性的单参数方法。- 查找方法名为
set + 首字母大写的属性名的单参数方法; - 查找方法名为属性名的单参数方法;
- Parameters:
fieldName- 属性名fieldType- 属性类型- Returns:
- 方法匹配器
- 查找方法名为
-
forSetterMethod
用于获得指定属性的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
用于匹配方法签名的方法匹配器,检查的内容包括:- 方法名是否完全一致;
- 返回值类型是否匹配,允许返回值类型为方法返回值类型的子类;
- 参数类型是否匹配,允许参数类型为方法参数类型的子类;
- 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
用于匹配方法签名的方法匹配器,检查的内容包括:- 方法名是否完全一致;
- 返回值类型是否匹配,要求返回值类型与方法返回值类型完全一致;
- 参数类型是否匹配,要求参数类型与方法参数类型完全一致;
- Parameters:
method- 方法- Returns:
- 方法匹配器
-
forName
用于根据方法名匹配方法的方法匹配器。- Parameters:
methodName- 方法名- Returns:
- 方法匹配器
-
forNameIgnoreCase
用于根据方法名匹配方法的方法匹配器,忽略方法名大小写。- Parameters:
methodName- 方法名- Returns:
- 方法匹配器
-
forNoneReturnType
用于匹配无返回值的方法的方法匹配器。- Returns:
- 方法匹配器
-
forReturnType
用于匹配指定参数类型的方法的方法匹配器,只要参数类型可以赋值给方法参数类型。- Parameters:
returnType- 返回值类型- Returns:
- 方法匹配器
-
forStrictReturnType
用于匹配指定返回值类型的方法的方法匹配器,要求返回值类型与指定类型完全一致。- Parameters:
returnType- 返回值类型- Returns:
- 方法匹配器
-
forNoneParameter
用于匹配无参数方法的方法匹配器。- Returns:
- 方法匹配器
-
forParameterCount
用于匹配指定参数个数的方法的方法匹配器。- Parameters:
count- 参数个数- Returns:
- 方法匹配器
-
forParameterTypes
- Parameters:
parameterTypes- 参数类型- Returns:
- 方法匹配器
-
forMostSpecificParameterTypes
用于匹配指定参数类型的方法的方法匹配器,与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
用于匹配指定参数类型的方法的方法匹配器,与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
用于匹配指定参数类型的方法的方法匹配器,只有参数类型完全匹配才认为匹配成功- Parameters:
parameterTypes- 参数类型- Returns:
- 方法匹配器
-