利用反射取得类中属性(引用及非引用数据类型)及设置该类实例化对象的属性值
来源:互联网 发布:联合石油数据库 在哪看 编辑:程序博客网 时间:2024/06/08 08:38
第一次尝试将自己学习中的收获记录下来,希望此举能够给自己带来方便或收获。
在做项目中,碰到一个问题:一个外界设备提供了一个包含该设备各项参数的类,因为不是自己所熟悉的设备(属性名),因此在开发中逐一设置太过于麻烦,因此想到了利用反射。
由于之前很少接触JAVA的反射机制,因此并不了解其具体操作,花时间大概熟悉了一下。由于项目的缘故,此次并没有深入了解,只是针对项目需要做了些功课。
下面是测试反射时使用的类的代码:
public class Bean {public String name;public String password;public int age;public Bean bean;public Bean(String name, String password, int age) {super();this.name = name;this.password = password;this.age = age;}}
这个类仅设置了几个属性和一个构造方法。
利用反射机制获取的属性只能是public的,并且不能是static的。
下面是测试的主类:
import java.lang.reflect.Field;public class Main {public static void main(String[] args) {Bean bean = new Bean("nameString", "passwordString", 20);try {test(bean);} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}/** * 测试利用反射取得类中属性(引用及非引用数据类型)及设置该类实例化对象的属性值 * * @param bean * 测试用的类 * @throws IllegalArgumentException * @throws IllegalAccessException */private static void test(Bean bean) throws IllegalArgumentException,IllegalAccessException {Field[] fields = Bean.class.getFields(); // 取得类的属性数组for (int i = 0; i < fields.length; i++) {System.out.println("*** : " + fields[i].getType());System.out.print("\t" + fields[i].getName());// Field的get()方法中的参数表示从哪里(对象)取得值System.out.println("\t " + fields[i].get(bean));// 当字段类型符合要求时,设置字段值if ((fields[i].getType()).equals(Integer.TYPE)) {// 基本数据类型无class,仅以其相关联的引用类型的TYPE常量表示// Field的set*()方法,第一个参数是字段所属对象,第二个为设置的字段值fields[i].setInt(bean, 50);} else if ((fields[i].getType()).equals(String.class)) {fields[i].set(bean, "haha");} else if ((fields[i].getType()).equals(Bean.class)) {fields[i].set(bean, new Bean("beanName", "beanPassword", 100));}}System.out.println("***************************************");// 输出修改之后的对象属性及属性值for (int i = 0; i < fields.length; i++) {if ((fields[i].getType()).equals(Bean.class)) {System.out.println("*** : " + fields[i].getType());Bean b = (Bean) fields[i].get(bean);System.out.println("\t" + b.name + " | " + b.password + " | "+ b.age);} else {System.out.println("*** : " + fields[i].getType());System.out.print("\t" + fields[i].getName());System.out.println("\t " + fields[i].get(bean));}}}}
下面是上述程序的运行效果:
本次对于反射只是做个初步了解,难免存在一些误差,有待于后续跟进、改正。
学习阶段,难免有些不足与错误,希望大家能够留言告知。
1 0
- 利用反射取得类中属性(引用及非引用数据类型)及设置该类实例化对象的属性值
- 在程序中引用对象的属性及方法
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- 利用反射机制动态获取对象属性名称及数据类型
- 利用反射机制动态获取对象属性名称及数据类型
- 通过反射取得对象中的属性列表及值
- 笔记:javascript通过反射和遍历,访问对象的所有属性,及 按引用/按值传递
- php 中 实例化对象的 赋值及 指针引用
- java利用反射技术遍历某个对象的属性及属性值
- C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西付给另一个类对象,而不是付给引用地址)
- json样式转化
- 创建Chrome浏览器插件
- 静态变量static
- 10个随机数相加
- 使用fuel6.0自动安装openstack-juno版本
- 利用反射取得类中属性(引用及非引用数据类型)及设置该类实例化对象的属性值
- 范范(10)
- 练手
- vb14
- Mybatis中oracle、mysql、db2、sql server的like模糊查询
- 剑指offer-面试题44:扑克牌的顺子
- 【目标检测】Faster RCNN算法详解
- 8种交换
- vb