利用反射取得类中属性(引用及非引用数据类型)及设置该类实例化对象的属性值

来源:互联网 发布:联合石油数据库 在哪看 编辑:程序博客网 时间: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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 事故全责不赔钱怎么办 吃精神药物发胖怎么办 郑州出院限号怎么办 林场改革森林消防怎么办 网络课没有看完怎么办 福建省会计证未换怎么办 国税地税登记后怎么办 网上发票领不了怎么办 合肥餐饮怎么办环评 地税财务报表上传错误怎么办? 平安体检卡过期怎么办 到医院挂号后怎么办 一吹风就头痛怎么办 平安口袋e怎么办离职 学员学分卡号怎么办 华医网注册错了怎么办 医师继续教育学分不够怎么办 执业医师学分卡怎么办 护士学分5年没办怎么办 华医网职称录入错误怎么办 在北京没有学历怎么办 继续教育证书丢了怎么办 继续教育证丢了怎么办 继续教育档案丢了怎么办 现在会计证丢了怎么办 初级准考证丢了怎么办 协助调查48小时怎么办 有个抑郁症父亲怎么办 法院不给立案怎么办 眼睛发炎有眼屎怎么办 外伤后眼白出血怎么办 斜视手术失败了怎么办 角膜划伤恢复慢怎么办 机场海关扣行李怎么办 被消防参谋恐吓怎么办 公安局贴的封条怎么办 公司倒闭后诉讼怎么办 股东不配合清算怎么办 消防罚款不交怎么办 武警撤勤海关怎么办 包包掉出租车上怎么办