Java obtient le tableau d'attributs de la classe et obtient la valeur d'attribut et définit la valeur d'attribut
1. Introduction aux points de connaissance
1. Obtenir le tableau d'attributs de la classe
Field[] fields = TicketOrder.class.getDeclaredFields(); // 获取类的属性数组
for (Field f : fields) {
System.out.println(f.getName()); // 打印属性名
}
2. Obtenir la valeur de l'attribut : obtenir la valeur de l'attribut via l'objet d'instance et le nom de l'attribut
/**
* 获取属性值:通过实例对象和属性名的方式获取属性值
*
* @param obj 实例对象
* @param fieldName 属性名
* @return
*/
public static Object getFieldValueByName(Object obj, String fieldName) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
Method method = obj.getClass().getMethod(getter, new Class[]{
});
Object value = method.invoke(obj, new Object[]{
});
return value;
} catch (Exception e) {
System.out.println(e.getMessage());
return null;
}
}
3. Définir la valeur de l'attribut : définissez la valeur de l'attribut au moyen de l'objet d'instance, du nom de l'attribut et de la valeur de l'attribut
/**
* 设置属性值:通过实例对象、属性名和属性值的方式设置属性值
*
* @param obj 实例对象
* @param fieldName 属性名
* @param value 属性值
*/
public static void setFieldValueByName(Object obj, String fieldName, Object value) {
try {
// 获取obj类的字节文件对象
Class c = obj.getClass();
// 获取该类的成员变量
Field f = c.getDeclaredField(fieldName);
// 取消语言访问检查
f.setAccessible(true);
// 给变量赋值
f.set(obj, value);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
2. Cas d'application
package com.hk.utils;
import com.hk.server.ServerMainClass;
import com.hk.server.dao.TicketOrderDao;
import com.hk.server.entity.TicketOrder;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashSet;
/**
* @author: shipleyleo
* @create: 2023-06-08 17:19:00
*/
public class GetAndSetField {
/**
* 获取属性值:通过实例对象和属性名的方式获取属性值
*
* @param obj 实例对象
* @param fieldName 属性名
* @return
*/
public static Object getFieldValueByName(Object obj, String fieldName) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
Method method = obj.getClass().getMethod(getter, new Class[]{
});
Object value = method.invoke(obj, new Object[]{
});
return value;
} catch (Exception e) {
System.out.println(e.getMessage());
return null;
}
}
/**
* 设置属性值:通过实例对象、属性名和属性值的方式设置属性值
*
* @param obj 实例对象
* @param fieldName 属性名
* @param value 属性值
*/
public static void setFieldValueByName(Object obj, String fieldName, Object value) {
try {
// 获取obj类的字节文件对象
Class c = obj.getClass();
// 获取该类的成员变量
Field f = c.getDeclaredField(fieldName);
// 取消语言访问检查
f.setAccessible(true);
// 给变量赋值
f.set(obj, value);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static void main(String[] args) throws NoSuchFieldException {
TicketOrderDao dao = ServerMainClass.ticketOrderDao; // 获取订单 DAO
HashSet hs = (HashSet) dao.getAllTicketOrder(); // 获取全部订单
ArrayList arr = new ArrayList(); // 创建集合
arr.addAll(hs); // 设置到 List 集合中
Field[] fields = TicketOrder.class.getDeclaredFields(); // 获取类的属性数组
// 测试获取属性值
for (Object o : arr) {
TicketOrder item = (TicketOrder) o;
for (Field f : fields) {
// 获取属性值
System.out.println(f.getName() + ":" + getFieldValueByName(item, f.getName()) + "\t"); // 属性名:属性值
}
System.out.println();
}
// 测试设置属性值,然后再重新获取属性值
System.out.println();
for (Object o : arr) {
TicketOrder item = (TicketOrder) o;
for (Field f : fields) {
// 设置属性值
switch (f.getType().getSimpleName()) {
case "int":
case "Integer":
setFieldValueByName(item, f.getName(), 123);
case "long":
case "Long":
setFieldValueByName(item, f.getName(), 123L);
break;
case "String":
setFieldValueByName(item, f.getName(), "abc");
break;
case "Calendar":
setFieldValueByName(item, f.getName(), Calendar.getInstance());
break;
default:
setFieldValueByName(item, f.getName(), null);
}
// 重新获取属性值
System.out.println(f.getName() + ":" + getFieldValueByName(item, f.getName()) + "\t"); // 属性名:属性值
}
System.out.println();
}
}
}
Résultat de sortie :
oid:1
passengerName:2
passengerId:3
cabinclass:4
tickettype:5
cal:java.util.GregorianCalendar[time=57600000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=1970,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=2,DAY_OF_YEAR=2,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=28800000,DST_OFFSET=0]
branchid:1
flightid:130765993
oid:123
passengerName:abc
passengerId:abc
cabinclass:abc
tickettype:abc
cal:java.util.GregorianCalendar[time=1686218537107,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2023,MONTH=5,WEEK_OF_YEAR=23,WEEK_OF_MONTH=2,DAY_OF_MONTH=8,DAY_OF_YEAR=159,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=6,HOUR_OF_DAY=18,MINUTE=2,SECOND=17,MILLISECOND=107,ZONE_OFFSET=28800000,DST_OFFSET=0]
branchid:123
flightid:123