Class MethodInvoker
java.lang.Object
org.miaixz.bus.core.lang.reflect.method.MethodInvoker
- All Implemented Interfaces:
Invoker
方法调用器,通过反射调用方法。
- Since:
- Java 17+
- Author:
- Kimi Liu
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionClass<?> getType()获取调用方法的返回类型或参数类型。<T> T调用指定目标对象的方法。static <T> T执行接口或对象中的方法static <T> TinvokeExact(Object obj, Method method, Object... args) 执行接口或对象中的方法,参数类型不做转换,必须与方法参数类型完全匹配static <T> TinvokeHandle(MethodHandle methodHandle, Object... args) 执行方法句柄,MethodHandle.invokeWithArguments(Object...)包装 非static方法需先调用MethodHandle.bindTo(Object)绑定执行对象。<T> TinvokeStatic(Object... args) 执行静态方法static MethodInvoker创建方法调用器setCheckArgs(boolean checkArgs) 设置是否检查参数
-
Constructor Details
-
MethodInvoker
构造- Parameters:
method- 方法
-
-
Method Details
-
of
创建方法调用器- Parameters:
method- 方法- Returns:
- 方法调用器
-
invokeHandle
执行方法句柄,MethodHandle.invokeWithArguments(Object...)包装 非static方法需先调用MethodHandle.bindTo(Object)绑定执行对象。需要注意的是,此处没有使用
MethodHandle.invoke(Object...),因为其参数第一个必须为对象或类。MethodHandle.invokeWithArguments(Object...)只需传参数即可。- Type Parameters:
T- 返回值类型- Parameters:
methodHandle-MethodHandleargs- 方法参数值,支持子类转换和自动拆装箱- Returns:
- 方法返回值
-
invoke
执行接口或对象中的方法interface Duck { default String quack() { return "Quack"; } } Duck duck = (Duck) Proxy.newProxyInstance( ClassKit.getClassLoader(), new Class[] { Duck.class }, MethodInvoker::invoke);- Type Parameters:
T- 返回结果类型- Parameters:
obj- 接口的子对象或代理对象method- 方法args- 参数,自动根据Method定义类型转换- Returns:
- 结果
- Throws:
InternalException- 执行异常包装
-
invokeExact
执行接口或对象中的方法,参数类型不做转换,必须与方法参数类型完全匹配interface Duck { default String quack() { return "Quack"; } } Duck duck = (Duck) Proxy.newProxyInstance( MethodInvoker.getClassLoader(), new Class[] { Duck.class }, MethodInvoker::invoke);- Type Parameters:
T- 返回结果类型- Parameters:
obj- 接口的子对象或代理对象method- 方法args- 参数- Returns:
- 结果
- Throws:
InternalException- 执行异常包装
-
setCheckArgs
设置是否检查参数1. 参数个数是否与方法参数个数一致 2. 如果某个参数为null但是方法这个位置的参数为原始类型,则赋予原始类型默认值
- Parameters:
checkArgs- 是否检查参数- Returns:
- this
-
invoke
Description copied from interface:Invoker调用指定目标对象的方法。- Specified by:
invokein interfaceInvoker- Type Parameters:
T- 返回类型- Parameters:
target- 目标对象,调用的方法属于该对象。args- 方法调用的参数数组。- Returns:
- 方法的返回值,方法的返回类型可以是任意类型。
- Throws:
InternalException
-
invokeStatic
执行静态方法- Type Parameters:
T- 对象类型- Parameters:
args- 参数对象- Returns:
- 结果
- Throws:
InternalException- 多种异常包装
-
getType
Description copied from interface:Invoker获取调用方法的返回类型或参数类型。
-