`

使用Java反射机制遍历实体类的属性和类型

阅读更多

这个方法使用到了java.lang.reflect包的Field类,Method类。

    此方法遍历实体类所有属性,对于常用的java包装类类型和java.util.Date,输出其属性值,如果有其它类型,则需自己扩展。

public static void testReflect(Object model) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
        Field[] field = model.getClass().getDeclaredFields();        //获取实体类的所有属性,返回Field数组  
            for(int j=0 ; j<field.length ; j++){     //遍历所有属性
                String name = field[j].getName();    //获取属性的名字

                 System.out.println("attribute name:"+name);                
                String type = field[j].getGenericType().toString();    //获取属性的类型
                if(type.equals("class java.lang.String")){   //如果type是类类型,则前面包含"class ",后面跟类名
                    Method m = model.getClass().getMethod("get"+name);
                    String value = (String) m.invoke(model);    //调用getter方法获取属性值
                    if(value != null){

                        System.out.println("attribute value:"+value);
                    }
                }
                if(type.equals("class java.lang.Integer")){    
                    Method m = model.getClass().getMethod("get"+name);
                    Integer value = (Integer) m.invoke(model);
                    if(value != null){
                        System.out.println("attribute value:"+value);
                    }
                }
                if(type.equals("class java.lang.Short")){    
                    Method m = model.getClass().getMethod("get"+name);
                    Short value = (Short) m.invoke(model);
                    if(value != null){
                        System.out.println("attribute value:"+value);                    }
                }      
                if(type.equals("class java.lang.Double")){    
                    Method m = model.getClass().getMethod("get"+name);
                    Double value = (Double) m.invoke(model);
                    if(value != null){                    
                        System.out.println("attribute value:"+value);  
                    }
                }                 
                if(type.equals("class java.lang.Boolean")){
                    Method m = model.getClass().getMethod("get"+name);   
                    Boolean value = (Boolean) m.invoke(model);
                    if(value != null){                      
                        System.out.println("attribute value:"+value);
                    }
                }
                if(type.equals("class java.util.Date")){
                    Method m = model.getClass().getMethod("get"+name);                   
                    Date value = (Date) m.invoke(model);
                    if(value != null){
                        System.out.println("attribute value:"+value.toLocaleString());
                    }
                }               
            }
    }

分享到:
评论
2 楼 BlueBing 2014-08-25  
一路的夏天 写道
楼主的代码会报错吧!
在前面的时候
String name = field[j].getName();    //获取属性的名字
比如我的里面有name这个属性,我得到的是“name”
但是这里得到方法
  Method m = model.getClass().getMethod("get"+name);
方法里面的参数应该是“getName”
而你这样加上的话是“getname”



你自己加上 name.substring(0,1).toUpperCase()+name.substring(1)
改变首字母大写嘛
1 楼 一路的夏天 2010-11-20  
楼主的代码会报错吧!
在前面的时候
String name = field[j].getName();    //获取属性的名字
比如我的里面有name这个属性,我得到的是“name”
但是这里得到方法
  Method m = model.getClass().getMethod("get"+name);
方法里面的参数应该是“getName”
而你这样加上的话是“getname”

相关推荐

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

    这里我们将深入探讨如何使用Java反射遍历实体类的属性和类型,并进行赋值和获取值的操作。 首先,我们需要理解Java反射的基本概念。`java.lang.reflect`包提供了几个核心类和接口,如`Class`、`Field`、`Method`和`...

    基于java8新特性+反射机制实现list不同实体类互转.zip

    这个压缩包文件“基于java8新特性+反射机制实现list不同实体类互转.zip”提供了一种解决方案,它利用了Java 8的新特性和反射机制来实现这种转换,并将这个功能封装为一个工具类。 首先,Java 8引入了许多新特性,...

    java反射,获取所有属性、方法以及List集合类

    本篇文章将深入探讨如何使用Java反射来获取一个类的所有属性、方法,并处理List集合类。 首先,让我们了解Java反射的基础概念。在Java中,`java.lang.Class`类代表运行时的类信息。我们可以使用`Class.forName()`...

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

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

    Java 通过反射给实体类赋值操作

    Java 通过反射给实体类赋值操作是 Java programming 语言中的一种常用技术,通过使用 Java 的反射机制,可以将请求中的参数赋值给实体类对象,从而简化了数据的处理过程。下面是该技术的详细说明: 什么是 Java ...

    java反射机制应用

    - 使用`BeanUtils.populate()`方法将表单数据自动填充到实体类的属性中。 这种方式不仅简化了代码,还提高了代码的可维护性和可扩展性。 ##### 2. 动态工厂模式 在不知道具体需要创建哪个类的实例时,可以使用...

    将Map转换成Java实体

    接着,遍历实体类的所有声明字段(不包括继承的字段),设置每个字段的值为Map中对应的键值。注意,由于Java的封装特性,我们需要通过`setAccessible(true)`使私有属性可访问。 这个方法虽然简单,但已经能够满足...

    通过反射获得实体类的字段和值

    通过以上讲解,我们不仅了解了如何使用反射来获取实体类的字段和值,还深入探讨了反射的基本原理及其在实际开发中的应用与限制。反射是一个强大的工具,合理利用它可以极大地提高代码的灵活性和重用性,但在使用时也...

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

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

    任意XML转实体类 实体类 转XML 方法 JAVA

    总结一下,XML转实体类和实体类转XML涉及的主要知识点有:Java反射API、XML解析(DOM、SAX、StAX、JAXB),以及对象的序列化和反序列化。在实际开发中,我们需要根据项目需求选择合适的工具和方法,确保数据的准确...

    java注解、java反射机制 jdbc 封装

    在本案例中,可能自定义了一些注解来标记数据库相关的实体类、表名、字段等信息,使得代码更易于理解和维护。 接着,我们来看Java反射机制。反射允许程序在运行时检查类、接口、字段和方法的信息,甚至可以动态调用...

    java从数据库表反射出实体类,自动生成实体类

    根据提供的文件信息,我们可以深入探讨如何使用Java编程语言来实现从数据库表中自动反射并生成实体类的功能。这种技术在实际开发中非常有用,尤其是在快速搭建项目基础结构时,能够大大减少手动编码的工作量。 ### ...

    MapUtils工具类,轻松转换map数据与实体类

    通常,该类会使用反射机制遍历`Map`中的每个键值对,根据键来找到对应实体类的setter方法,并调用它设置值。为了确保安全,工具类可能还会包含一些错误处理机制,如检查键是否存在,值类型是否匹配等。 在实际开发...

    一次获得界面所有实体类的数据

    在`ParamUtils`类中,反射被用来遍历实体类的所有方法,寻找setter方法,并根据请求参数的名称和类型调用相应的setter方法。这使得我们无需为每个实体类手动编写解析代码,从而大大提高了开发效率。 #### ...

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

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

    基于Java动态代理和反射机制实现ORM

    例如,我们可以遍历一个实体类的所有字段,根据字段名和类型生成INSERT或UPDATE语句,或者在查询结果集后,通过反射将结果集的每一行映射到对应的实体类实例上。 接下来,以MySQL数据库为例,我们需要建立一个...

    用java生成实体类

    1. **反射(Reflection)**:Java反射机制允许程序在运行时检查类、接口、字段和方法的信息,并能够动态调用方法或改变字段值。在生成实体类时,反射可以用于获取数据库表的元数据,如字段名、类型等,然后基于这些...

    java根据实体类生成Hibernate映射文件

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象...这个过程涉及到Java反射、XML处理以及对Hibernate映射机制的理解,对于深入掌握Java与数据库的交互具有重要的实践意义。

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

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

    Java利用反射导入导出Excle

    本文将深入探讨如何利用Java反射机制来实现Excel的导入和导出,并生成相应的实体类。 首先,我们需要理解反射的基本概念。在Java中,`java.lang.Class`类代表运行时的类信息,通过`Class.forName()`或对象的`...

Global site tag (gtag.js) - Google Analytics