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

本文介绍如何利用Java反射机制动态地为对象赋值,包括解析字符串中的属性名和值,并根据不同属性类型进行相应的赋值操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值