这个方法使用到了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());
}
}
}
}
分享到:
相关推荐
这里我们将深入探讨如何使用Java反射遍历实体类的属性和类型,并进行赋值和获取值的操作。 首先,我们需要理解Java反射的基本概念。`java.lang.reflect`包提供了几个核心类和接口,如`Class`、`Field`、`Method`和`...
这个压缩包文件“基于java8新特性+反射机制实现list不同实体类互转.zip”提供了一种解决方案,它利用了Java 8的新特性和反射机制来实现这种转换,并将这个功能封装为一个工具类。 首先,Java 8引入了许多新特性,...
本篇文章将深入探讨如何使用Java反射来获取一个类的所有属性、方法,并处理List集合类。 首先,让我们了解Java反射的基础概念。在Java中,`java.lang.Class`类代表运行时的类信息。我们可以使用`Class.forName()`...
总的来说,Java反射机制的使用可以帮助我们在运行时动态地访问和修改类的行为,而上述示例展示了如何利用反射在实体类之间进行属性的自动赋值,这在数据处理和对象复制场景中非常有用。然而,需要注意的是,过度使用...
Java 通过反射给实体类赋值操作是 Java programming 语言中的一种常用技术,通过使用 Java 的反射机制,可以将请求中的参数赋值给实体类对象,从而简化了数据的处理过程。下面是该技术的详细说明: 什么是 Java ...
- 使用`BeanUtils.populate()`方法将表单数据自动填充到实体类的属性中。 这种方式不仅简化了代码,还提高了代码的可维护性和可扩展性。 ##### 2. 动态工厂模式 在不知道具体需要创建哪个类的实例时,可以使用...
接着,遍历实体类的所有声明字段(不包括继承的字段),设置每个字段的值为Map中对应的键值。注意,由于Java的封装特性,我们需要通过`setAccessible(true)`使私有属性可访问。 这个方法虽然简单,但已经能够满足...
通过以上讲解,我们不仅了解了如何使用反射来获取实体类的字段和值,还深入探讨了反射的基本原理及其在实际开发中的应用与限制。反射是一个强大的工具,合理利用它可以极大地提高代码的灵活性和重用性,但在使用时也...
通过这样的方式,我们利用Java反射机制实现了对实体类所有属性的遍历,并在遇到null值时为其赋上默认值,从而避免了因null值导致的问题。这种技术在处理动态数据、序列化和反序列化、框架和库的实现等方面非常有用,...
总结一下,XML转实体类和实体类转XML涉及的主要知识点有:Java反射API、XML解析(DOM、SAX、StAX、JAXB),以及对象的序列化和反序列化。在实际开发中,我们需要根据项目需求选择合适的工具和方法,确保数据的准确...
在本案例中,可能自定义了一些注解来标记数据库相关的实体类、表名、字段等信息,使得代码更易于理解和维护。 接着,我们来看Java反射机制。反射允许程序在运行时检查类、接口、字段和方法的信息,甚至可以动态调用...
根据提供的文件信息,我们可以深入探讨如何使用Java编程语言来实现从数据库表中自动反射并生成实体类的功能。这种技术在实际开发中非常有用,尤其是在快速搭建项目基础结构时,能够大大减少手动编码的工作量。 ### ...
通常,该类会使用反射机制遍历`Map`中的每个键值对,根据键来找到对应实体类的setter方法,并调用它设置值。为了确保安全,工具类可能还会包含一些错误处理机制,如检查键是否存在,值类型是否匹配等。 在实际开发...
在`ParamUtils`类中,反射被用来遍历实体类的所有方法,寻找setter方法,并根据请求参数的名称和类型调用相应的setter方法。这使得我们无需为每个实体类手动编写解析代码,从而大大提高了开发效率。 #### ...
Java实现不同的类的属性之间...这篇文章讲解了如何使用 Java 实现不同的类的属性之间相互赋值,使用了 Java 的反射机制来实现属性之间的赋值。这种方法可以帮助我们在开发过程中快速实现属性之间的赋值,提高开发效率。
例如,我们可以遍历一个实体类的所有字段,根据字段名和类型生成INSERT或UPDATE语句,或者在查询结果集后,通过反射将结果集的每一行映射到对应的实体类实例上。 接下来,以MySQL数据库为例,我们需要建立一个...
1. **反射(Reflection)**:Java反射机制允许程序在运行时检查类、接口、字段和方法的信息,并能够动态调用方法或改变字段值。在生成实体类时,反射可以用于获取数据库表的元数据,如字段名、类型等,然后基于这些...
在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象...这个过程涉及到Java反射、XML处理以及对Hibernate映射机制的理解,对于深入掌握Java与数据库的交互具有重要的实践意义。
在“实体类反射非空赋值,AjaxJson工具类”这个主题中,我们将探讨如何使用反射来安全地为实体类的属性赋值,并结合Ajax与JSON进行数据的转换和交互。 首先,让我们深入了解反射的概念。Java反射API提供了Class类,...
本文将深入探讨如何利用Java反射机制来实现Excel的导入和导出,并生成相应的实体类。 首先,我们需要理解反射的基本概念。在Java中,`java.lang.Class`类代表运行时的类信息,通过`Class.forName()`或对象的`...