`
gaojingsong
  • 浏览: 1157134 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【java反射之动态属性赋值】

阅读更多

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制

 

 

核心代码如下:

package demo.tt;

 

import java.lang.reflect.Field;

 

public class ReflectDemo {

    /**

     * 在使用Flume传递数据的时候,

     * Flume传递的数据没有属性名字,只有属性值(一条记录通过分割符分割的字符串),

     * 此时唯一能够想到的方法是:

     * 方案一:拆分字符串,然后一个个赋值处理 ;

     * 方案二:使用反射实现动态赋值

     * @param args

     * @throws IllegalAccessException 

     * @throws InstantiationException 

    */

     @SuppressWarnings("rawtypes")

     public static void main(String[] args) throws Exception {

             String val ="001;张三;20";

             String key ="id;name;age";

 

            UserVO virtualUser = new UserVO();

 

           Class clazz = virtualUser.getClass();

           Object bean = clazz.newInstance();

 

            String[] keys = key.split(";");

            String[] vals = val.split(";");

 

            for (int i = 0; i < vals.length; i++) {

                 Field field = bean.getClass().getDeclaredField(keys[i]);//int String

                 field.setAccessible(true);

 

                  String type = field.getType().toString();//得到此属性的类型 

                  if (type.endsWith("String")) {  

                         System.out.println(field.getType()+"\t是String");  

                          field.set(bean,vals[i]) ;        //给属性设值  

                   }else if(type.endsWith("int") || type.endsWith("Integer")){  

                         System.out.println(field.getType()+"\t是int");  

                        field.set(bean,Integer.valueOf(vals[i])) ;       //给属性设值  

                  }else{  

                        System.out.println(field.getType()+"\t");  

                 }  

                 //System.out.println(field.getType().getSimpleName());

              }

         System.out.println(bean);

        }

 

    }

 

------------------------------------------------------------------------------------------------------------------

    public class UserVO {

         private int id;

        private String name;

          private int age;

       省略get/set

}

 

0
1
分享到:
评论

相关推荐

    通过构造及反射实现类属性赋值

    给目标对象赋值另一个对象时,只是将源对象的地址指向了目标对象,而并没有执行对象属性的set器,有时需要使用set做通知,本实例通过构造及反射实现类属性自动赋值。

    java 利用反射机制,获取实体所有属性和方法,并对属性赋值

    主要介绍了 java 利用反射机制,获取实体所有属性和方法,并对属性赋值的相关资料,需要的朋友可以参考下

    java反射遍历实体类属性和类型,并赋值和获取值的简单方法

    下面小编就为大家带来一篇java反射遍历实体类属性和类型,并赋值和获取值的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    通过反射赋值的java代码

    使用反射技术对java实体类进行操作,得到所有属性并赋值给属性

    JavaScript 反射和属性赋值实例解析

    这篇文章主要介绍了JavaScript 反射和属性赋值实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Java和.NET都有着比较完善的反射机制,用来处理未知的...

    Java常用的反射方法

    3. 反射获取属性变量 3.1 获取所有public修饰符的成员变量 3.2 获取指定字段并赋值 3.3 获取所有的成员变量(不考虑修饰符) 3.4 获取私有的变量(利用暴力反射) 4. 反射获取构造方法 4.1有参构造 4.2无参构造 ...

    Java反射工具类

    提供以下几个功能: 1. 取最简类名 2. 动态赋值 3. 动态取值 4. 判断是否普通类型(自定义成员变量) 5. 动态取指定类的所有属性名

    java反射大讲堂 实例源码下载

    这里是个人整理的Java反射大杂烩,里面有获取类的继承关系,类的属性,类的方法,调用类中的方法,给类中私有属性赋值。。。。一系列操作。

    Java反射如何修改private final成员变量值

    主要介绍了Java反射如何修改private final成员变量值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Java开发技术大全(500个源代码).

    listFields.java 利用反射机制获取成员属性列表 listMethods.java 利用反射机制获取成员方法列表 loadClass.java 动态装载一个类 Shape.java 一个用于测试的简单类 useArray1.java 用反射机制使用数组示例1 ...

    不了解java反射机制,怎么看懂框架

    文章目录一、理解反射的基础(重要指数五颗星爆表)1.Class文件2.Java虚拟机的类加载机制二、反射——框架设计的灵魂2.1是什么2.2与反射相关的类三、反射的使用3.1获得Class对象的三种方式3.2反射调用构造方法并使用...

    Java Instrumentation Framework.rar

    在使用Java反射机制时,主要步骤包括: ①获取 目标类型的Class对象 ②通过 Class 对象分别获取Constructor类对象、Method类对象 & Field 类对象 ③通过 Constructor类对象、Method类对象 & Field类对象分别获取类...

    java基础案例与开发详解案例源码全

    15.2 使用Java反射机制414 15.2.1 获取类型信息414 15.2.2 创建对象417 15.2.3 调用方法419 15.2.4 访问成员变量的值421 15.2.5 操作数组422 15.3 反射与动态代理424 15.3.1 静态代理424 15.3.2 动态代理426 15.4 本...

    JDBC+映射文件(M.xml)+反射+对象来完成一个伪ORM框架

    反射回去到一个类,类名,类的所有属性,创建对象,给对象中私有属性赋值。还记得刚开始学java的时候,对于java里的私有属性,想要操作它,得需要通过创建对象调用它set或get方法,才能操作这些私有属性。那么对于使用...

    疯狂JAVA讲义

    学生提问:为什么有栈内存和堆内存之分? 93 4.6.2 基本类型数组的初始化 95 4.6.3 引用类型数组的初始化 96 4.6.4 没有多维数组 99 学生提问:我是否可以让图4.13中灰色覆盖的数组元素再次指向另一个数组?这样...

    java 编程入门思考

    10.2 增添属性和有用的接口 10.2.1 通过FilterInputStream从InputStream里读入数据 10.2.2 通过FilterOutputStream向OutputStream里写入数据 10.3 本身的缺陷:RandomAccessFile 10.4 File类 10.4.1 目录列表器 ...

    Java初学者入门教学

    10.2 增添属性和有用的接口 10.2.1 通过FilterInputStream从InputStream里读入数据 10.2.2 通过FilterOutputStream向OutputStream里写入数据 10.3 本身的缺陷:RandomAccessFile 10.4 File类 10.4.1 目录列表器 ...

    java联想(中文)

    10.2 增添属性和有用的接口 10.2.1 通过FilterInputStream从InputStream里读入数据 10.2.2 通过FilterOutputStream向OutputStream里写入数据 10.3 本身的缺陷:RandomAccessFile 10.4 File类 10.4.1 目录列表器 ...

    JAVA_Thinking in Java

    10.2 增添属性和有用的接口 10.2.1 通过FilterInputStream从InputStream里读入数据 10.2.2 通过FilterOutputStream向OutputStream里写入数据 10.3 本身的缺陷:RandomAccessFile 10.4 File类 10.4.1 目录列表器 ...

    Thinking in Java 中文第四版+习题答案

    10.2 增添属性和有用的接口 10.2.1 通过FilterInputStream从InputStream里读入数据 10.2.2 通过FilterOutputStream向OutputStream里写入数据 10.3 本身的缺陷: 10.4 File类 10.4.1 目录列表器 10.4.2 检查与创建...

Global site tag (gtag.js) - Google Analytics