java 反射 动态调用函数
来源:互联网 发布:汽车用品大全淘宝网 编辑:程序博客网 时间:2024/05/29 11:42
1、遇到问题,int等基础数据类型,获取参数类型的时候获取到的是Integer等非基础数据类型,导致报错!!
如代码2中所示,可能函数存在int类型的参数也可能存在Integer参数,所以也不能简单的把Integer的转换成int.class。(其实很少有用到Integer作为参数的吧)
代码如下:
package demo.reflect.b;/** * 试试反射的常用功能 * @author zmy * */public class ReflectionDemo {/** * 试试参数传递怎么用 * @param p * @return *///调用这个参数类型的时候参数类型应该是int.classpublic String UpString(String p,int num){return p.toUpperCase()+num;}//调用这个的时候参数类型是Integerpublic String UpString(String p,Integer num){return p.toUpperCase()+ num;}}
import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class TestReflection {/** * @param args * @throws InstantiationException * @throws InvocationTargetException * @throws IllegalAccessException * @throws NoSuchMethodException * @throws ClassNotFoundException * @throws IllegalArgumentException * @throws SecurityException */ public static void main(String[] args) throws SecurityException, IllegalArgumentException, ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { // TODO Auto-generated method stub Object [] myArgs = {"sdf",123}; test("demo.reflect.b.ReflectionDemo","UpString",myArgs); }
public static void test(String ClassName,String methName,Object[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException { Class demoClass = Class.forName(ClassName); Class [] paraTypes = new Class[args.length]; for(int i =0; i < args.length; i++) { //基础数据类型的时候会存在问题,报错说函数未定义。int的其实应该传入int.class而不是Integer。 paraTypes[i] = args[i].getClass(); System.out.println("paraTypes["+i+"]:" + paraTypes[i]); //这里把int.class作为参数类型是不会存在问题的。 //args[1].getClass 获取的为Integer.class,是会调用重载的使用Integer作为参数的函数的。 if(paraTypes[i].equals(Integer.class)) { paraTypes[i] = int.class; System.out.println("paraTypes["+i+"]change to Type:" + paraTypes[i]); } } Method method = demoClass.getMethod("UpString", paraTypes); System.out.println(method.invoke(demoClass.newInstance(), args)); }}
运行结果如下:
paraTypes[0]:class java.lang.StringparaTypes[1]:class java.lang.IntegerparaTypes[1]change to Type:intSDF123
- java 反射 动态调用函数
- java反射动态方法调用
- java动态反射调用方法
- java 反射动态方法调用
- java 反射机制调用函数
- 使用反射通过字符串动态调用函数
- 使用反射通过字符串动态调用函数
- Java 反射进行动态方法调用
- java反射动态调用传参
- JAVA利用反射调用函数的时间
- Java反射调用带参数的函数
- Java中的函数动态调用
- Java中的函数动态调用
- Java中的函数动态调用
- Java中的函数动态调用
- 反射动态调用
- 动态调用WebService反射
- 反射动态调用方法
- 技巧:用 C 语言实现程序的多态性: C中只有两种类型int 和void *, 万能指针void *
- velocity语法
- 《结构——C#第八周》
- 《孙子兵法》在敏捷项目管理中的应用(1)
- 开源免费天气预报接口API以及全国所有地区代码!!(国家气象局提供)
- java 反射 动态调用函数
- Image Cataloguer(图片编目)
- c/c++ struct union 对齐方式
- 《孙子兵法》在敏捷项目管理中的应用(2)
- OpenCV实用工具
- “武林人士”测试简介
- java设计模式-外观模式(Facade)
- 《孙子兵法》在敏捷项目管理中的应用(3)
- linux下nginx+uwsgi部署python应用