黑马程序员——反射的实际应用
来源:互联网 发布:男士船袜淘宝 编辑:程序博客网 时间:2024/06/06 21:39
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一。应用配置文件运行类中的方法
定义一个类
public class Worker {public void show(){System.out.println("爱工作,爱生活");}}
应用反射调用方法
import java.io.FileReader;import java.lang.reflect.Constructor;import java.lang.reflect.Method;import java.util.Properties;/* * 通过配置文件运行类中的方法 分析: 首先要有类 其次要有配置文件 配置文件中应该有类名和方法名 通过Properties读取配置文件的内容 通过forname方法获取字节码文件 通过getmethod方法获取相应方法 调用执行方法 */public class ConfigFileTest {public static void main(String[] args) throws Exception {//加载键值对数据到Properties集合FileReader fr = new FileReader("config.txt");Properties prop = new Properties();prop.load(fr);fr.close();//获取类名和方法名String className = prop.getProperty("className");String methodName = prop.getProperty("methodName");//获取类的字节码文件并创建对象Class c = Class.forName(className);Constructor con = c.getConstructor();Object obj = con.newInstance();//调用方法Method m = c.getMethod(methodName);m.invoke(obj);}}
配置文件的内容为
className=cn.itcast_test.Worker
methodName=show
如果改变配置文件的内容则调用的类和方法也就不一样了,这样就节省了很多代码,提高了代码的可处理性。
二。跳过泛型的限制给集合添加元素
import java.lang.reflect.Method;import java.util.ArrayList;/* * 我给你ArrayList<Integer>的一个对象,我想在这个集合中添加一个字符串数据,如何实现呢? 分析: 若直接使用此对象肯定是无法添加字符串数据的,那么我们可以获取此对象的字节码文件 然后通过字节码文件获取成员方法来添加数据 */public class ArrayListTest {public static void main(String[] args) throws Exception{ArrayList<Integer> al = new ArrayList<Integer>();Class c = al.getClass();//获取成员方法Method m = c.getMethod("add",Object.class);m.invoke(al, "hello");m.invoke(al, "world");m.invoke(al, "java");System.out.println(al);}}该使用是在底层使用add方法,所以跳过了泛型的限制。
三。利用反射来设计特殊的方法
import java.lang.reflect.Field;/* * 写一个方法,public void setProperty(Object obj, String propertyName, Object value){},此方法可将obj对象中名为propertyName的属性的值设置为value。 */public class AssignmentTool {public void setProperty(Object obj,String propertyName,Object value) throws Exception{//获取字节码文件对象Class c = obj.getClass();//获取成员变量propertyNameField field = c.getDeclaredField(propertyName);//取消访问检查field.setAccessible(true);//赋值field.set(obj, value);}}
0 0
- 黑马程序员——反射的实际应用
- 黑马程序员———反射技术的高级应用
- 黑马程序员——反射的应用&Hashcode
- 黑马程序员——反射的理解与应用
- 黑马程序员——反射机制的应用
- 黑马程序员—反射的机制及应用1
- 黑马程序员:反射的应用
- 黑马程序员-反射的应用
- 黑马程序员-反射的应用
- 黑马程序员——反射应用
- 黑马程序员——反射2:应用
- 黑马程序员——反射——类的加载,反射的应用,简单动态代理
- 反射的实际应用
- 黑马程序员——【Java反射学习】反射的应用:测试泛型的本质
- 黑马程序员——【Java】【高新技术】自定义泛型类 & 通过反射获得泛型的实际类型参数
- 黑马程序员—反射
- 黑马程序员—反射
- 黑马程序员—反射
- 安卓 Context 上下文+应用共享概括
- devinzhang
- python中xml Excel解析编码小结
- @class 优化作用.
- how to boot a computer?
- 黑马程序员——反射的实际应用
- ubuntu14 安装virtualBox5.0方法
- Android开发之ActionBar与DrawerLayout
- laravel结合datatables使用。
- Android遇到java.lang.RuntimeException: Binary XML file line #20这样的问题怎么办
- [LeetCode 319] Bulb switch
- ActionBar Tab与ViewPager整合
- sql server 还原数据库时提示数据库正在使用,无法进行操作的解决方法
- Leetcode-224.Basic Calculator