近期由于负责项目的一个模块,该模块下有很多分类,每个分类都有一个编码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

System.out.println(str);

//}

return str;

}

public  String ceshi2(String str,int i){

for(int j=0;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反射原理的可以参考:http://www.cnblogs.com/forlina/archive/2011/06/21/2085849.html

java反射 动态调用_java反射拼接方法名动态执行方法相关推荐

  1. java反射 获取属性_Java反射学习-3 - 反射获取属性,方法,构造器

    1 packagecn.tx.reflect;2 3 importjava.lang.reflect.Constructor;4 importjava.lang.reflect.Field;5 imp ...

  2. Spring AOP根据JdbcTemplate方法名动态设置数据源

    2019独角兽企业重金招聘Python工程师标准>>> 说明:现在的场景是,采用数据库(Mysql)复制(binlog)的方式在两台不同服务器部署并配置主从(Master-Slave ...

  3. JDK源码解析 Runable是一个典型命令模式,Runnable担当命令的角色,Thread充当的是调用者,start方法就是其执行方法

    JDK源码解析 Runnable是一个典型命令模式, Runnable担当命令的角色,Thread充当的是调用者,start方法就是其执行方法 /命令接口(抽象命令角色) public interfa ...

  4. java反射方法调用_Java反射(3)调用方法

    目录: 1.访问方法(Method)对象的方法汇总 2.获取方法(Method)对象中的值 3.设置方法(Method)对象中的值 1.访问Method的方法汇总 以下四种方法在Class类可以返回关 ...

  5. java反射传递参数_Java反射 调用传参

    //测试方法 @Test public void test01() { Class p = null; Person01 person01 = new Person01(); try { p = Cl ...

  6. java反射机制知识_Java反射机制讲解,程序员必须掌握的知识点

    关注程序员7歌,一起用技术改变世界 大家好,我是程序员7歌,今天我为大家讲解Java的反射机制. 首先我们来看看反射的概念: Java反射说的就是在程序运行中,任何一个类,我们都可以知道这个类的方法和 ...

  7. java class 生成对象_Java反射机制(创建Class对象的三种方式)

    1:SUN提供的反射机制的类: java.lang.Class java.lang.reflect.Constructor java.lang.reflect.Field java.lang.refl ...

  8. java反射重要么_JAVA反射----这些知识你需要知道

    前言: 在学习JAVA的反射之前我觉得很有必要花几分钟时间了解一下JVM的内存结构.如果一开始就说什么是反射,以及反射的API.这样做是很难真正的理解反射的. JVM是JAVA跨平台的核心,其结构为上 ...

  9. java反射的运用_java反射的使用

    java反射的使用 1 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力. JAVA反射机制是在运行状态中,对于任意一个类,都能够 ...

最新文章

  1. Linux网卡重启后会有哪些更新,问题:linux系统经常出现断网的情况,重启之后系统恢复正常...
  2. js算法入门(2)--哈希表
  3. Postgresql死锁的处理
  4. Service Mesh 在中国工商银行的探索与实践
  5. jsp到java xml配置,JSP中web配置:web.xml
  6. vb鼠标涂鸦板的制作
  7. 降级安装_如何升级iOS13测试版,还有降级
  8. postgresql对于HashJoin算法的Data skew优化与MCV处理
  9. nodejs与javascript中的aes加密
  10. 小米mysql安装教程_小米 SOAR 开源SQL优化工具安装
  11. [Java] 蓝桥杯ADV-91 算法提高 素数判断
  12. 关于asp.net上传图片自动生成缩略图
  13. 备忘:BLOCK CORRUPTION IN SYSTEM DATAFILE
  14. DOSBox 的安装及使用 详细教程
  15. SpacePack 运维工具之 Auto fdisk
  16. 马云:今天互联网创业还靠免费是死路一条
  17. windows xp快捷键
  18. Eclipse中查看源代码
  19. PS知识点大总结(二)——通道蒙版与图形图标设计
  20. lumen框架的理解

热门文章

  1. 跨域获取后台数据undefined_同源策略amp;JSONP跨域
  2. 软件工程(可行性研究讲解)
  3. 生活中java继承例子_简单继承例子:java
  4. 【SpringBoot 2】(十)数据库相关
  5. 洛谷 P2689 东南西北【模拟/搜索】
  6. thinkphp5.0助手函数占用服务器资源
  7. 364. Nested List Weight SumII
  8. org.apache.catalina.LifecycleException: Failed to
  9. SublimeText2使用笔记
  10. 转:数字对讲机常识介绍