`
gaojingsong
  • 浏览: 1196924 次
  • 性别: 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
分享到:
评论

相关推荐

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

    标题中的“通过构造及反射实现类属性赋值”涉及到的技术是Java的构造函数和反射机制。这两种方法在特定场景下能帮助我们更灵活、更深入地处理对象属性的复制。 首先,构造函数是创建新对象时调用的特殊方法,它可以...

    java反射给指定字段赋值

    ### Java反射机制详解:给指定字段赋值 在Java编程语言中,反射是一个非常强大的功能,它允许程序在运行时检查或“反映”自身,并直接操作内部属性(如类、方法和字段)。本文将深入探讨如何利用Java反射来访问并...

    利用反射给属性赋值

    利用反射给属性赋值是编程中一种灵活而强大的技术,它可以帮助我们处理动态性、灵活性和复杂性。然而,由于其潜在的安全问题和性能影响,应合理使用并在必要时采取适当的保护措施。在理解了反射的工作原理和应用场景...

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

    3. **给属性赋值**: - 使用`field[i].getType().getConstructor(field[i].getType()).newInstance("kou")`创建字段类型的实例,并将其作为参数传递给`set`方法,从而给字段赋值。这适用于基本类型和字符串类型的...

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

    通过这样的方式,我们利用Java反射机制实现了对实体类所有属性的遍历,并在遇到null值时为其赋上默认值,从而避免了因null值导致的问题。这种技术在处理动态数据、序列化和反序列化、框架和库的实现等方面非常有用,...

    通过反射赋值的java代码

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

    利用反射实现JavaBean 的自动赋值

    反射是Java提供的一种能够在运行时分析类的信息并操作类的成员(如方法、属性)的能力。通过反射,可以在运行时动态获取类的信息,并根据这些信息创建实例、调用方法、修改属性等,这为编程提供了极大的灵活性。 ##...

    java 反射对XML的解析

    例如,假设XML文件中有一个`employee`元素,我们可以使用反射创建对应的`Employee`类实例,并将`employee`元素的属性赋值给`Employee`对象的相应字段。这在配置驱动的设计模式中非常常见,比如Spring框架就是通过...

    实体类反射非空赋值,AjaxJson工具类

    在“实体类反射非空赋值,AjaxJson工具类”这个主题中,我们将探讨如何使用反射来安全地为实体类的属性赋值,并结合Ajax与JSON进行数据的转换和交互。 首先,让我们深入了解反射的概念。Java反射API提供了Class类,...

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

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

    Java 1.5 反射机制

    Java 1.5引入的反射机制是其动态性的一个重要体现,它允许程序在运行时检查和操作类、接口、对象及其方法。反射为开发者提供了强大的能力,可以在不知道具体类名的情况下实例化对象,调用方法,访问字段,以及处理...

    Java常用的反射方法

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

    Java实现不同的类的属性之间相互赋值

    Java实现不同的类的属性之间...这篇文章讲解了如何使用 Java 实现不同的类的属性之间相互赋值,使用了 Java 的反射机制来实现属性之间的赋值。这种方法可以帮助我们在开发过程中快速实现属性之间的赋值,提高开发效率。

    java反射机制给实体类相同字段自动赋值实例

    总的来说,Java反射机制的使用可以帮助我们在运行时动态地访问和修改类的行为,而上述示例展示了如何利用反射在实体类之间进行属性的自动赋值,这在数据处理和对象复制场景中非常有用。然而,需要注意的是,过度使用...

    Java反射工具类

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

    python类似java的反射操作

    在Python编程语言中,虽然没有像Java那样直接的“反射”机制,但Python提供了一套类似的动态类型系统和元编程能力,使得程序在运行时能够检查、修改甚至创建类和对象。这种特性使得Python代码更加灵活,允许程序员在...

    java反射机制学习(六):动态代理

    Java反射机制是Java语言中一个强大的工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在动态代理部分,我们将探讨如何利用反射机制实现动态代理,这在处理面向切面编程(AOP)或者为已...

    MyBatis拦截器:给参数对象属性赋值的实例

    如果操作类型是这两种之一,拦截器就会继续进行属性赋值。否则,它会跳出循环,不进行额外操作。 在实际赋值部分,由于示例代码没有给出具体的赋值逻辑,通常这会涉及到反射(`java.lang.reflect.InvocationTarget...

Global site tag (gtag.js) - Google Analytics