作者:一腕儿本人 | 来源:互联网 | 2024-12-05 17:27
示例代码如下:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Date;
/**
* 使用反射技术获取实体类的属性名及其类型,并对其进行操作。
* @param entity 实体对象实例
* @throws Exception 可能抛出的各种异常
*/
public class EntityReflection {
public static void reflectEntity(Object entity) throws Exception {
// 获取实体类的所有字段
Field[] fields = entity.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true); // 设置字段可访问(包括私有字段)
String fieldName = field.getName(); // 获取字段名称
Class> fieldType = field.getType(); // 获取字段类型
// 输出字段信息
System.out.println("Field Name: " + fieldName + ", Type: " + fieldType.getName());
// 为字段赋值
if (fieldType == String.class) {
field.set(entity, "示例字符串");
} else if (fieldType == int.class || fieldType == Integer.class) {
field.set(entity, 123);
} else if (fieldType == double.class || fieldType == Double.class) {
field.set(entity, 123.45);
} else if (fieldType == boolean.class || fieldType == Boolean.class) {
field.set(entity, true);
} else if (fieldType == Date.class) {
field.set(entity, new Date());
}
// 获取字段值
Method getter = entity.getClass().getMethod("get" + capitalize(fieldName));
Object fieldValue = getter.invoke(entity);
System.out.println("Field Value: " + fieldValue);
}
}
private static String capitalize(String str) {
return Character.toUpperCase(str.charAt(0)) + str.substring(1);
}
public static void main(String[] args) {
try {
MyEntity myEntity = new MyEntity();
reflectEntity(myEntity);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// 示例实体类
class MyEntity {
private String name;
private int age;
private double height;
private boolean active;
private Date createdAt;
// Getters and Setters...
}
通过上述示例代码,我们展示了如何使用Java反射技术来动态地操作实体类的属性,包括获取属性名称、类型、设置属性值以及获取属性值等操作。此方法在处理不确定结构的数据时非常有用,例如在开发框架或工具库时,可以提高代码的灵活性和复用性。