今天有一个这样的需求:
在XML里面写上方法的名称,在代码里进行解析这个XML得到用户自定义的接口类,然后调用对应的方法;
这个我先用 Jdom进行解析XML的,得到相应的方法名称,得到的是一个String格式的,接着就遇到了String转换成Class类的问题,网上搜索了一下,找到相应的技术,Java反射机制,看来还是自己技术不到家啊,到现在还不知道Java反射机制呢,汗啊。于是花费了一点点的时间进行了补充学习一下,用到的只是基本在这里,拿出来进行记录一下,也分享给各位观众,有用得着的尽量拿去。
String JavaName = "com.geezn.mobile.action.RqMobileLogin"; 1:通过变量得到类名 Class stringType = "".getClass(); System.out.println(stringType); 输出时class java.lang.String
2:由名字获得类 Class<?> c = null; try { c = Class.forName(JavaName); } catch (ClassNotFoundException e) { TODO Auto-generated catch block e.printStackTrace(); } System.out.println(c); 输出 class com.geezn.mobile.action.RqMobileLogin 3:无参数的调用方法 try { // 获取class文件 Class<?> t_class = Class.forName(JavaName); // 获取该类所需求的方法 Method method = t_class.getDeclaredMethod("test"); method.invoke(t_class.newInstance());// 方法的实现 } catch (Exception e) { e.printStackTrace(); } 4:有参数的调用方法 String result = ""; try { // 获取class文件 Class<?> t_class = Class.forName(JavaName); // 获取该类所需求的方法 Method method = t_class.getDeclaredMethod("test",String.class,String.class); result = (String) method.invoke(t_class.newInstance(),"参数1","参数2");// 方法的实现 } catch (Exception e) { e.printStackTrace(); } System.out.println("返回的数据=====" + result);
|