- 浏览: 65589 次
- 性别:
- 来自: 成都
文章分类
最新评论
最近遇到一个问题,重复的写一些方法,这些方法基本除了调用对象的方法不同外其他的都相同,发现这个相同点后,就在考虑怎么写一个方法,只需要传入对象方法的名字就可以对方法进行调用。
这里会用到java反射:
首先建立一个使用反射调用的类Computer:
package com; public class Computer { public Computer(){ super(); } public void surfInternet(){ System.out.println("网上冲浪"); } public void watchTV(){ System.out.println("网上看电视"); } public void workOffice(){ System.out.println("网上办公"); } public int getLength(String str){ System.out.print("字符长度为: "); return str.length(); } public static String getName(String name){ return name; } }
下面我写一个反射调用的主函数:
package com; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class TestReflect1 { public static Object invokeMethod(Method method,Object obj,Object...args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{ return method.invoke(obj, args); } public static void main(String[] args) { try { int len = (Integer)invokeMethod(Computer.class.getMethod("getLength", String.class),Computer.class.newInstance(),"HP"); System.out.println(len); String str = (String)invokeMethod(Computer.class.getMethod("getName", String.class),null,"HP"); System.out.println(str); String [] strs = new String[]{ "watchTV","surfInternet","workOffice" }; for(int i=0;i<strs.length;i++) invokeMethod(Computer.class.getMethod(strs[i], null), Computer.class.newInstance(), null); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } } }
比较下面的代码:
int len = (Integer)invokeMethod(Computer.class.getMethod("getLength", String.class),Computer.class.newInstance(),"HP"); System.out.println(len); String str = (String)invokeMethod(Computer.class.getMethod("getName", String.class),null,"HP"); System.out.println(str);
发现一个传入了对象一个没有传入对象,原因是在于一个为成员方法,一个为静态方法,静态方法可以说是在类加载的时候就已经创建了,而成员方法必须是对象创建是才被创建,所以成员方法必须加入对象。
再看下面的调用:
String [] strs = new String[]{ "watchTV","surfInternet","workOffice" }; for(int i=0;i<strs.length;i++) invokeMethod(Computer.class.getMethod(strs[i], null), Computer.class.newInstance(), null);
Computer中含有3个类似的方法,而且参数基本相同,所以我就使用一个数组的方式来对这个对象进行调用,而不是直接通过对象调用方法。
这样做就可以在进行相似处理时传入对象的方法来进行调用。
但是使用反射后运行效率会下降,但是代码的重用性却提高了不少。
发表评论
-
FastJSON使用
2015-06-30 10:25 721fastJSON基本使用: public static S ... -
堆排序
2014-06-07 22:23 704堆排序有以下需要注意的: parent=n/2 l ... -
java
2014-03-20 21:44 703Caused by: org.springframework ... -
guava测试例子,取值和定时重新装载
2014-02-21 17:54 1122package com.taobao.saleengine. ... -
java大顶堆排序
2013-09-11 23:59 1266public class Heap{ // 构造 ... -
java树结构简单实现
2013-09-10 23:46 6312import java.util.Scanner; ... -
java
2012-12-13 16:52 0zookeeper基础:http://www.ibm.com/ ... -
插入排序的实现
2012-05-27 13:54 851插入排序是最简单的排序算法 : 看了看书按照书上说的对插入排 ... -
在web中直接调用Nutch执行JOB
2012-05-27 01:15 4633看了http://zha-zi.iteye.com/blog/ ... -
gwt(google web toolkit) 和 spring 在一起使用列子
2012-05-04 00:30 2187在开发gwt时,有时需要 ... -
gxt 主题
2012-01-04 13:15 1561在使用gxt的时候,我们会注意到页面的主题, 如果我们想改变 ... -
gxt 中文
2012-01-03 13:30 5098在使用gxt的时候 发现默认使用的是English 这样的话 ... -
JDBC连接mysql
2011-10-29 17:13 1657个人开发时主要还是使用mysql,所以就顺便把连接mysql的 ... -
java多线程学习网址
2011-08-15 08:54 0http://lavasoft.blog.51cto.com/ ...
相关推荐
java 反射 调用私有方法(有参数私有方法)获取私有属性值
Java反射 调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用基本类型数组参数的方法 调用String数组参数的方法 调用Object数组参数的方法 调用私有方法
通过Java反射调用方法,适合初级自学者,通俗易懂
本例演示了如何使用反射,调用类的静态方法,封装了工具类ClsTool,统一实现静态方法的调用。使用反射,在特定场景下,能够很好的简化代码。例如mybatis
java反射调用set方法时如果让参数做自动类型转换5 这段时间学习java的反射机制想实现一个功能:遍历一个Map,然后利用反射机制调用BO的set方法,完成BO属性的自动注入。这样设计的初衷是解决Excel数据导入问题中的...
通过java类的路径实例化类并调用方法:仅仅知道类的路径,就可以实例化对象,利用反射机制调用其方法
Java 反射创建get set方法及反射方法的调用
Java 反射调用设置值
java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名。本项目为普通java项目
代码为JAVA反射的一个DEMO,适合初学者临摹学习,还附有properties的创建方法,比较基础。
万能的反射封装接口,值得下载参考,当成util
反射,动态加载指定类调用类中的方法 简单例子
spring与java反射结合动态定义类及调用函数,实现类的动态定义和函数的动态调用。 为有动态调用的web应用提供一点点借鉴,相互学习。
NULL 博文链接:https://shulinshulinzi.iteye.com/blog/2372372
利用java反射原理实现方法的动态调用。
Java反射机制,万物皆对象,class也是一个类的对象,通过类类型,反射获得类的成员属性,构造方法,成员方法,并调用类中的方法,也可以调用私有方法。
该篇文章主要介绍当我们碰到参数或者返回值是一个对象时,如何通过frida反射调用该对象的方法(methods)与获取该对象的字段(fields)。感兴趣的朋友可以下载下来看看,了解了解
调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用数组参数的方法 调用私有方法
下面小编就为大家带来一篇Java 反射调用静态方法的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧