//利用反射技术,实现为实体类的属性赋值
package org.reflect.reflecttest;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.reflect.entity.Student;
import org.reflect.entity.User;
/**
* 利用反射技术,实现为实体类的属性赋值
* @author clplain;
*
*/
public class SetValue {
/**
* 赋值方法
* @param cla:表示将要给那个类的属性赋值,表示类
* @param maps:key表示属性名,value表示值
* @return
*/
public static Object setValue(Class cla,Map<String,Object> maps){
/**
* 1.创建一个类的对象
* 2.调用该对象的set方法赋值
* 2.1.获得方法名
* 2.1.1、根据属性名获得方法名
* 2.2.调用方法
* 3.返回已经赋值的对象
*/
Object obj = null;
try {
//根据类的反射,创建这个类的对象
obj = cla.newInstance();
//获得属性名,Map中保存了所有的属性的名字(key)
//获得所有的key\
Set keySet = maps.keySet();//获得存储所有key的Set集合
//迭代所有set集合
Object[] keyObjs = keySet.toArray();//将set集合转换为Object数组
for(Object keyName : keyObjs){//数组中的每个元素都是一个属性名
String fieldName = keyName.toString();
//根据属性名获得属性
Field field = cla.getDeclaredField(fieldName);
//根据属性名获得方法名
String methodName = "set"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);
//根据方法名获得方法
Method method = cla.getDeclaredMethod(methodName, field.getType());
//参数1,表示对象,参数2, 给方法赋的值
method.invoke(obj, maps.get(keyName));//调用方法,等同于obj.method(maps.get(keyName));
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return obj;
}
public static void main(String[] args) {
/**
*测试方法为实体类User赋值;
*/
Map<String,Object> map = new HashMap<String,Object>();
map.put("uid", 1);
map.put("uname", "chenlong");
map.put("upass", "男");
User user = (User) setValue(User.class,map);
System.out.println(user.getUid()+","+user.getUname()+","+user.getUpass());
}
}
分享到:
相关推荐
这种方法特别适用于处理大量数据表的情况,避免了手动为每个实体类属性赋值的繁琐操作。反射虽然提供了一种灵活的方式来实现这一目标,但在性能敏感的应用场景中可能不是最佳选择。因此,在实际应用中,还需要根据...
这个压缩包文件“基于java8新特性+反射机制实现list不同实体类互转.zip”提供了一种解决方案,它利用了Java 8的新特性和反射机制来实现这种转换,并将这个功能封装为一个工具类。 首先,Java 8引入了许多新特性,...
然而,在实际开发中,我们经常需要将枚举值反向映射到实体类的属性上,以便在处理表单提交的数据时进行赋值。这可以有效地减少代码的冗余,提高可读性和维护性。本文将详细探讨如何创建一个工具类来实现这个功能。 ...
通过这样的方式,我们利用Java反射机制实现了对实体类所有属性的遍历,并在遇到null值时为其赋上默认值,从而避免了因null值导致的问题。这种技术在处理动态数据、序列化和反序列化、框架和库的实现等方面非常有用,...
在Java编程中,反射是一种强大的工具,它允许我们在运行时...此外,对于获取和设置值的部分,如果实体类的属性类型较多,可以考虑使用反射API提供的`isAssignableFrom`方法和泛型,以实现更通用的赋值和获取值的逻辑。
本文将深入探讨如何利用反射来简化给类字段赋值的过程,这对于动态操作对象属性和执行未知类型的操作尤其有用。 首先,我们需要了解C#中的反射是如何工作的。`System.Reflection`命名空间提供了所有关于反射的类。...
在上述的"java反射机制给实体类相同字段自动赋值实例"中,我们看到如何利用反射来实现两个实体类之间相同字段的自动赋值。下面将详细解释这一过程。 1. **创建工具类**: - 在提供的代码中,定义了一个名为`Class...
本篇文章将详细探讨如何实现生成自定义注解的实体类,以及它们在实际开发中的应用。 一、自定义注解的定义 自定义注解的定义类似于接口,但以`@interface`关键字开头。下面是一个简单的自定义注解示例: ```java @...
利用反射技术,可以高效地实现实体类对象与表单之间的赋值操作,尤其是在处理大量数据时显得非常省事。 首先,我们来看反射(Reflection)技术。反射是在运行时获取程序集信息、加载和实例化类型以及调用其成员(如...
创建一个Person实体类 2. 反射获取Class类对象的三种方法 2.1 通过全类名的方式获取 2.2 类名.class 2.3 实例对象.getClass() 2.4 总结 3. 反射获取属性变量 3.1 获取所有public修饰符的成员变量 3.2 获取...
要想对一个类型实例的属性或字段进行动态赋值或取值,首先得得到这个实例或类型的Type,微软已经为我们提供了足够多的方法。 首先建立一个测试的类 代码如下: public class MyClass { public int one { set; get; } ...
本文将深入探讨如何在C#中实现两个具有相同属性的类之间的赋值方法,特别是使用反射技术进行赋值。 首先,让我们分析提供的代码片段: ```csharp public static D Mapper, S>(S s) { D d = Activator....
当从外部源(如网页表单或数据库查询结果)接收数据时,我们可以利用反射机制动态地创建bean对象并设置其属性值。 以下是一个简化的步骤来实现这个功能: 1. **获取bean类**:首先,你需要一个Class对象,它代表你...
我们可以利用反射动态地创建对象、调用方法或设置属性,这对于实现数据绑定非常有用。 实现SQLite数据与实体的自动绑定,我们可以遵循以下步骤: 1. **创建实体模型类**:首先,为每张数据库表创建一个对应的实体...
"类属性拷贝器"就是一种工具,它实现了类似Java中的Apache Commons Lang库中`BeanUtils.copyProperties()`的功能,允许开发者快速地将一个类的属性值复制到另一个类,无需手动为每个属性赋值。下面我们将详细讨论这...
1. **元数据解析**:分析数据库表结构和Java实体类,确定字段与列的映射关系。 2. **SQL生成**:根据元数据动态构建SQL语句,进行查询、插入、更新和删除操作。 3. **结果集映射**:将数据库查询结果转换为Java对象...
例如,它利用反射加载和保存数据库实体,调用getter和setter方法来映射属性,以及执行HQL(Hibernate查询语言)中的动态方法调用。 总结来说,Java 1.5的反射机制极大地增强了Java的灵活性和动态性,使得开发者能够...
1. 实体类与数据库表的映射:Hibernate通过阅读实体类的注解(如@Entity、@Table等),利用反射获取类的元数据,从而建立对象与数据库表之间的映射关系。例如,@Id注解标识主键字段,@Column注解定义列名,这些信息...
为了实现自动绑定,我们可以利用反射API。反射允许我们在运行时检查类、接口、字段和方法的信息,甚至可以动态调用方法和修改字段值。我们可以创建一个通用的方法,将任何结果集自动映射到对应的实体类: ```java ...
这个“c# 通过反射创建实例,并给实例赋值”的主题深入探讨了如何利用反射来操作类的实例。 首先,我们需要了解什么是类型(Type)。在C#中,每个类、接口、结构等都有一个对应的System.Type对象,它包含了关于该...