这个方法使用到了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());
}
}
}
}
==============================
Method类invoke方法的使用
/**
* Method的使用方法
* @author Callan
*
*/
public class Names {
public String firstName = "Callan";
public String lastName = "Wang";
public String getFullName(){
return firstName + " " + lastName;
}
public String getFullName(String firstName,String lastName){
return firstName + " " + lastName;
}
}
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* Method的使用方法
* @author Callan
*
*/
public class Test {
public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
Names methods = new Names();
// 调用getFullName()方法
Method method1 = methods.getClass().getMethod("getFullName");
Object obj1 = method1.invoke(methods, null);
System.out.println(obj1);
// 调用getFullName(String firstName,String lastName)方法
Method method2 = methods.getClass().getMethod("getFullName", new Class[]{String.class,String.class});//方法带有两个String类型的参数
// invoke(从中调用基础方法的对象,用于方法调用的参数)
Object obj2 = method2.invoke(methods, new String[]{"Callan","Wang"});
System.out.println(obj2);
}
}
分享到:
相关推荐
这里我们将深入探讨如何使用Java反射遍历实体类的属性和类型,并进行赋值和获取值的操作。 首先,我们需要理解Java反射的基本概念。`java.lang.reflect`包提供了几个核心类和接口,如`Class`、`Field`、`Method`和`...
这个过程通常涉及到遍历实体类的所有公共属性(Public Properties),并将属性名和对应的属性值拼接成一个字符串。以下是一个简单的示例: ```csharp public class PackReflectionEntity { public static string ...
在`ParamUtils`类中,反射被用来遍历实体类的所有方法,寻找setter方法,并根据请求参数的名称和类型调用相应的setter方法。这使得我们无需为每个实体类手动编写解析代码,从而大大提高了开发效率。 #### ...
接着,遍历实体类的所有声明字段(不包括继承的字段),设置每个字段的值为Map中对应的键值。注意,由于Java的封装特性,我们需要通过`setAccessible(true)`使私有属性可访问。 这个方法虽然简单,但已经能够满足...
利用反射技术,代码生成器可以遍历实体类的所有公共属性,根据这些属性生成对应的INSERT、UPDATE、SELECT等T-SQL语句。这极大地简化了数据库操作的编码工作,同时降低了出错的可能性。 反射是.NET框架提供的一种...
遍历获得一个实体类的所有属性名,以及该类的所有属性的值 //先定义一个类: public class User { public string name { get; set; } public string gender { get; set; } public string age { get; set; } } ...
Java集合框架提供了多种接口和类,如Set、List和Map,它们各自有不同的特性和用途。本文将详细介绍如何遍历这些集合类型的实例。 首先,我们来看Set集合。Set接口代表不包含重复元素的集合,它的遍历方法主要有两种...
在“C#代码自动生成”中,反射被用来遍历实体类的所有公共属性,这一步骤至关重要,因为这些属性通常对应着数据库表的字段。 接下来,我们探讨DLL动态加载技术。DLL(动态链接库)是共享代码的机制,多个程序可以...
4. **遍历实体上的特征**:在NX中,实体是构成零件的基本几何形状,如平面、曲面或实体体。特征则是添加到实体上的设计元素,如孔、槽、倒角等。遍历实体上的特征,可以进一步获取每个特征的详细信息,如类型、参数...
### C# 数据实体类中如何给属性赋值 在C#开发中,处理数据库查询结果时,经常需要将查询结果映射到实体类中。本文将详细介绍如何在C#的数据实体类中为属性赋值,特别是当从数据库中取出的是一个`DataSet`对象时。 ...
将XML数据转换为Java实体类(Bean)以及将实体类转换回XML是两个重要的操作,这对于数据的序列化和反序列化至关重要。下面将详细解释这两个过程以及涉及的相关知识点。 首先,XML转实体类的过程通常涉及到Java的...
5. 将实体数组转换为DataTable:最后,遍历实体数组并将每个实体的属性值填充到DataTable的新行中: ```csharp foreach (var entity in entities) { var row = dataTable.NewRow(); foreach (var property in ...
当我们处理业务数据时,经常需要在不同实体类的列表之间进行转换,以满足不同的业务需求。这个压缩包文件“基于java8新特性+反射机制实现list不同实体类互转.zip”提供了一种解决方案,它利用了Java 8的新特性和反射...
《使用Codesmith生成C#实体类的简易模板详解》 在软件开发过程中,尤其是在与数据库交互的业务逻辑层,实体类的创建是一项繁琐且重复的工作。 Codesmith是一款强大的代码生成工具,它允许开发者通过定制模板来自动...
2. **解析特性**:在程序中,我们需要遍历实体类的所有属性,检查它们是否带有`DbKey`特性。这可以通过反射(Reflection)来实现。例如,`getDbKeyFields<T>`方法就是获取所有带有`DbKey`特性的属性: ```csharp ...
在`writeXML`方法中,通过循环遍历实体类列表,为每个对象创建一个XML元素,然后添加到根元素下。`writeXml(Element root, Object obj)`方法利用反射获取对象的所有字段,并创建对应的XML元素。`document....
通常,该类会使用反射机制遍历`Map`中的每个键值对,根据键来找到对应实体类的setter方法,并调用它设置值。为了确保安全,工具类可能还会包含一些错误处理机制,如检查键是否存在,值类型是否匹配等。 在实际开发...
ASP.NET实体类生成器是一个基于C#开发的小型实用程序,设计用于自动化创建实体类的过程。在软件开发中,实体类通常被用来作为数据库表的映射,它们封装了数据并提供与数据库交互的方法。实体类是面向对象编程中一个...
在上述代码中,我们首先创建了工作簿和工作表,然后遍历实体类的字段,通过反射获取注解信息,创建表头。接着,我们遍历数据列表,为每一行填充数据。最后,将工作簿写入到指定的文件中。 使用这个工具类,你可以...