java反射拼接方法名动态执行方法实例

作者:jingxian 时间:2022-12-07 00:44:28 

近期由于负责项目的一个模块,该模块下有很多分类,每个分类都有一个编码code,这个值是作为一个参数携带过来的。但是每个code确实对应一个方法的。

code的值有很多个,自己又不想做ifelse或者switch判断于是就狂搜资料,主要让我发现利用java的反射机制可以完美的解决这个问题

测试代码如下:(可以携带多个参数哦)


package com.escs.xmlutils;

import java.lang.reflect.Method;

public class Test {

public String ceshi(){
System.out.println("1111111111111");
return "success";
}
public static void main(String[] args) throws Exception {
//里面写自己的类名及路径
Class<?> c = Class.forName("com.escs.xmlutils.Test");
Object obj = c.newInstance();
//第一个参数写的是方法名,第二个\第三个\...写的是方法参数列表中参数的类型
Method method=c.getMethod("ceshi2", String.class,int.class);
//invoke是执行该方法,并携带参数值
String str2= (String) method.invoke(obj, new Object[]{"myname",4});
 System.out.println(str2);
}
public String ceshi(String str){
//for(int j=0;j<Integer.valueOf(i);j++){
System.out.println(str);
//}

return str;
}

public String ceshi2(String str,int i){
for(int j=0;j<i;j++){
System.out.println(str+"22222");
}

return str;
}

}

这样要是动态拼接方法名就更简单了.比如,我的code值有100个,分别为1~100,我code方法分别为ReturnCodeList();这个时候我们把上面的方法抽取出来,返回我们需要的值就行了比如:


public String fanShe(String methodName,String className) throws ClassNotFoundException, SecurityException, NoSuchMethodException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
//里面写自己的类名及路径
Class<?> c = Class.forName(className);
Object obj = c.newInstance();
//第一个参数写的是方法名,第二个\第三个\...写的是方法参数列表中参数的类型
Method method=c.getMethod(methodName, String.class,int.class);
//invoke是执行该方法,并携带参数值
String str2= (String) method.invoke(obj, new Object[]{"myname",4});
return str2;
}

当然在实际的需求中还是要根据项目的需要来自己抽取方法的.希望对大家有帮助。

标签:java,反射,执行方法
0
投稿

猜你喜欢

  • Android 文件操作详解及简单实例

    2021-10-29 06:23:01
  • Java中通过Class类获取Class对象的方法详解

    2021-11-09 17:12:57
  • C#实现rabbitmq 延迟队列功能实例代码

    2023-03-18 02:59:34
  • SpringBoot 二维码生成base64并上传OSS的实现示例

    2023-05-12 04:41:33
  • C#反射内存的处理分析

    2022-04-30 00:56:22
  • 详解Unity日志打印工具功能

    2022-03-27 09:34:19
  • Android数据库中事务操作方法之银行转账示例

    2023-07-22 07:56:13
  • spring data jpa如何使用自定义repository实现类

    2023-05-31 07:41:17
  • java web中 HttpClient模拟浏览器登录后发起请求

    2022-10-27 23:07:05
  • Android Webview与ScrollView的滚动兼容及留白处理的方法

    2021-09-27 00:56:40
  • Java探索之Feign入门使用详解

    2023-08-18 03:38:06
  • Java parseInt解释加方法示例

    2021-09-17 15:13:55
  • SpringBoot简单实现文件上传

    2021-09-04 12:24:52
  • Android实现webview实例代码

    2022-05-28 13:32:32
  • c# WPF中自定义加载时实现带动画效果的Form和FormItem

    2021-05-29 22:49:17
  • Eclipse开发环境导入android sdk的sample中的源码

    2021-06-08 05:28:38
  • web 容器的设计如何实现

    2022-04-07 00:29:51
  • 基于spring-boot和docker-java实现对docker容器的动态管理和监控功能[附完整源码下载]

    2022-02-04 00:41:18
  • Java concurrency集合之ArrayBlockingQueue_动力节点Java学院整理

    2023-07-01 22:19:29
  • Java汉字转拼音工具类完整代码实例

    2021-07-09 21:32:18
  • asp之家 软件编程 m.aspxhome.com