从文件中读取内容设置为对象的方法
来源:互联网 发布:女生学php好找工作吗 编辑:程序博客网 时间:2024/05/19 15:44
通过反射的机制
反射的讲解
- 反射:通过class文件对象,去使用该文件的成员变量,构造方法,成员方法。
首先必须先得到一个class文件对象
class类的内容:成员变量 Field 构造方法 Constructor 成员方法Method
获得class文件的方法:通过Class文件提供的静态方法
public static Class forName(String className)
-获取到构造方法并且使用//获取字节码文件对象 Class c = class.forName("cn.itcast_01.Person"); //获取单个构造方法 Constructor com = c.getConstructor(); //public T newInstance(Object... initargs) //使用此Constructor 对象表示的构造方法来创建一个实例 Object obj= con.newInstance(); System.out.println(obj);//获取带参数的构造方法 Constructor con = c.getConstructor(String.class, int.class, String.class);//使用带参数的构造方法创建对象 Object obj = con.newInstance("潇洒", 27, "差别科技部");//通过反射获取私有构造方法并使用 Constructor con = c.getDeclaredConstructor(String.class); con.setAccessible(true); //无视private Object obj = con.newInstance("擦");
通过反射获取成员变量
“`
//获取字节码文件对象
Class c = class.forName(“cn.itcast_01.Person”);
//通过无参数构造方法创建对象
Constructor con = c.getConstructor();
Object o = con.newInstance();
//获取单个成员变量
Field addressField = c.getField(“address”);
//public void set(Object obj, Object value)
addressField.set(obj, “北京”);//给obj对象的addressField字段设置为北京
//获取age字段并赋值
Field ageField = c.getField(“age”);
ageField.setAccessible(true);
ageField.set(obj, 27);
“`
使用一个方法
*第一 创建字节码文件对象c
第二 通过字节码文件对象获取构造方法
第三 通过构造方法 创建一个对象的实例obj
第四 通过字节码对象调用getMethod()方法m1
第五 m1.invoke(obj,String.class) 调用obj对象的m1方法
*创建一个类Person
package cn.itcast.introspector;//实体类---javaBeanpublic class Person { int id; String name; public Person(int id, String name) { super(); this.id = id; this.name = name; } public Person(){} public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "编号:"+ this.id+" 姓名:"+ this.name; }}
读取配置文件
public class Demo1 { public static void main(String[] args) throws Exception { Person p = (Person) getInstance(); System.out.println(p); } //根据配置文件的内容生产对象的对象并且要把对象的属性值封装到对象中。 public static Object getInstance() throws Exception{ BufferedReader bufferedReader = new BufferedReader(new FileReader("obj.txt")); String className = bufferedReader.readLine(); //读取配置文件获取到完整的类名。 Class clazz = Class.forName(className); //通过class对象获取到无参的构造方法 Constructor constructor = clazz.getDeclaredConstructor(null); //创建对象 Object o = constructor.newInstance(null); //读取属性值 String line = null; while((line = bufferedReader.readLine())!=null){ String[] datas = line.split("="); //通过属性名获取到对应的Field对象。 Field field = clazz.getDeclaredField(datas[0]); if(field.getType()==int.class){ field.setAccessible(true); field.set(o, Integer.parseInt(datas[1])); }else{ field.setAccessible(true); field.set(o, datas[1]); } } return o; }}
- 从文件中读取内容设置为对象的方法
- java从文件中读取内容方法
- 【python】从MySQL中读取内容,存为json对象的列表
- 从文件中读取内容
- 从文件中读取内容,并去掉换行符'\n'的一种简单方法
- 读取文件内容并转换为对象
- 一个可以从txt文件中逐行(可设置)读取文本的方法
- 如何从文件系统中读取文件内容
- 从HttpServletRequest中读取文件内容
- 读取文件内容的方法
- jsp中读取xml文件中内容的方法
- shell中3中种读取文件内容的方法
- 从文件读取内容
- ios中读取plist文件内容的方法
- php中读取文件内容的几种方法
- Qt中从数据库读取内容,从xml读取内容,设置QSS
- 两种从资源文件中读取常量的方法
- MATLAB中从文件夹批量读取图片文件的方法
- 系统测试和集成测试的区别
- ajax中文乱码问题
- Python多线程
- openssl编程
- SVN如何断开和服务器
- 从文件中读取内容设置为对象的方法
- IOS
- Django系利问题解决
- python中关于模块,包以及import的学习
- Codeforces 681D Gifts by the List dfs+构造
- Subtext3
- Jackson快速入门
- 2.9段寄存器
- 删除xcode 中过期的描述性文件