通过java反射机制动态调用某方法的总结(推荐)
作者:jingxian 时间:2022-11-04 01:38:32
如下:
public Object invokeMethod(String className, String methodName,
Object[] args) throws Exception{
Class ownerClass = Class.forName(className);
Object owner = ownerClass.newInstance();
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(owner, args);
}
但是,我们在实际应用中,还会碰到一种情况,传入的实参和要被调用的方法的形参可能不完全一致:
比如,在struts1.x中的某个方法被调用时候,它会有HttpServletResponse类型的参数,
我们在tomcat中,request对象的实例其实是:org.apache.catalina.connector.ResponseFacade
它实现了接口:javax.servlet.http.HttpServletResponse;
如果我们直接把web容器中的request对象当做一个参数,传入上面的代码片段的话, 就有问题,这时,我们的处理办法是这样的,在action中,方法一般形如:
public ActionForward query(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
response一般位于第四个,那么我们修改以上的代码:
把
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
改为:
for (int i = 0, j = args.length; i < j; i++) {
if(i == 3){
argsClass[i] = HttpServletResponse.class;
}
else{
argsClass[i] = args[i].getClass();
}
}
标签:java,反射机制,动态,调用
0
投稿
猜你喜欢
Spring JPA联表查询之注解属性详解
2021-11-04 14:19:04
解析JDK14中的java tools简介
2023-04-18 10:28:37
java序列化和java反序列化示例
2023-11-24 04:01:03
Android实现带动画效果的可点击展开TextView
2023-08-06 05:42:08
Android组件ViewStub基本使用方法详解
2022-01-15 07:30:54
通过JDK源码学习InputStream详解
2022-09-10 19:50:29
详解如何在Java中实现堆排序算法
2023-11-11 11:34:46
简单实现C#异步操作
2022-09-05 06:03:00
Spring中的事务隔离级别和传播行为
2022-07-21 18:18:24
JavaWeb实现多文件上传及zip打包下载
2023-11-16 16:41:25
Java 方法签名详解及实例代码
2022-02-04 05:56:06
Android保持屏幕常亮唤醒状态的方法
2021-05-30 15:15:29
Java数据封装树形结构代码实例
2022-04-12 08:11:44
Java设计模式之享元模式
2022-01-30 19:03:28
Android可自定义神奇动效的卡片切换视图实例
2022-11-24 09:07:46
Android编程实现的短信编辑器功能示例
2022-09-08 12:58:44
IDEA集成MyBatis Generator插件的使用
2023-08-12 00:28:47
C# SQlite操作方法小结
2021-10-01 15:56:09
C# 获取硬件参数的实现方法
2023-11-04 21:30:38
java Semaphore共享锁实现原理解析
2021-11-02 23:12:38