java反射拼接方法名动态执行方法
近期由于负责项目的一个模块,该模块下有很多分类,每个分类都有一个编码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反射原理的可以参考:http://www.cnblogs.com/forlina/archive/2011/06/21/2085849.html
java反射拼接方法名动态执行方法的更多相关文章
- 利用java反射调用类的的私有方法--转
原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...
- c#输入方法名来调用方法(反射)
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...
- C# 通过方法的字符串名动态调用方法 反射实现
通过字符串执行方法,在可能会调用不同方法时对不同方法进行调用 以下为实例: public class ABC { string str = "通过反射执行的方法"; //Class ...
- java反射 顺序输出类中的方法
java反射可以获取一个类中的所有方法,但是这些方法的输出顺序,并非代码的编写顺序. 我们可以通过自定义一个注解来实现顺序输出类中的方法. 首先,先写一个类,定义增删改查4个方法 public cla ...
- Java反射机制涉及的类常见方法使用总结
import java.lang.reflect.Constructor; import java.lang.reflect.*; /*Class:代表一个字节码文件的对象,每当有类被加载进内存,JV ...
- 浅谈Java反射机制 之 获取类的 方法 和 属性(包括构造函数)
上一篇 获取 类 的字节码文件 我们讲到了获取类的字节码文件的三种方法 第三种方法通过getClass("全路径名")获取字节码文件最符合要求 1.获取构造方法 先贴上我们要获取的 ...
- Java反射机制 之 获取类的 方法 和 属性(包括构造函数)(Day_06)
把自己立成帆,才能招来凤. 运行环境 JDK8 + IntelliJ IDEA 2018.3 本文中使用的jar包链接 https://files.cnblogs.com/files/papercy ...
- java反射机制应用之动态代理
1.静态代理类和动态代理类区别 静态代理:要求被代理类和代理类同时实现相应的一套接口:通过代理类的对象调用重写接口的方法时,实际上执行的是被代理类的同样的 方法的调用. 动态代理:在程序运行时,根据被 ...
- Java反射04 : 通过Array动态创建和访问Java数组
java.lang.reflect.Array类提供了通过静态方法来动态创建和访问Java数组的操作. 本文转载自:https://blog.csdn.net/hanchao5272/article/ ...
随机推荐
- C++使用简单的函数指针
函数指针: 被调用函数指针必须包括函数的存储器地址,为了正常工作,指针还必须包括其它信息,这一参数列表指针的参数类型和返回类型的函数. 因此,当你声明一个函数指针,数的參数类型和返回类型.以及指针名. ...
- linux Apache安装
原文:linux Apache安装 1. 下载apache,http://httpd.apache.org/download.cgi 通过这个官方网站,我们可以下到最新的版本.现在版本都 ...
- iframe参数
iframe参数: <iframe src="test.jsp" width="100″ height="50″ frameborder="no ...
- 实现双8bit数据指定的位置0要么1
<pre name="code" class="cpp"> 方法一 #include<stdio.h> #include<math ...
- JavaScript 数组的indexOf()、remove()、splice() , pop()方法
js中,按照值删除数组中的某个元素 Array.prototype.indexOf = function(val) { for (var i = 0; i < this.l ...
- crawler_JVM_DNS_在爬虫中的应用
DNS解析:即由域名 经过dns解析,跳转到真正服务器的地址,这个重复解析的耗时占请求很大比例. 在设计爬虫时比较细粒度的控制下,需要考虑dns解析. jdk从1.5往后对dns缓存有默认设置, 详见 ...
- ReactJS.NET
初探ReactJS.NET 开发 ReactJS通常也被称为"React",是一个刚刚在这场游戏中登场的新手.它由Facebook创建,并在2013年首次发布.Facebook认为 ...
- 【百度地图API】如何激发手机的高分辨率
原文:[百度地图API]如何激发手机的高分辨率 摘要:不少用户使用百度地图API开发在移动浏览器上的应用时发现,明明自己的手机是高分辨率的,但是显示出来的地图却比较模糊,甚至“看不清楚”.接下来,我们 ...
- Django教程汇总
Django基础教程 被解放的姜戈01 初试天涯 被解放的姜戈02 庄园疑云 被解放的姜戈03 所谓伊人 被解放的姜戈04 各取所需 被解放的姜戈05 黑面管家 被解放的姜戈06 假作真时 Djang ...
- RethinkDB创始人教你如何打造一个伟大的互联网产品
关于作者 我叫Slava Akhmechet,本人是 RethinkDB 的创始人之一,RethinkDB是开源,分布式数据库,旨在帮助开发人员与运营商在打造实时应用时处理无结构数据 如何打造一个伟大 ...