Java gets the attribute array of the class & gets the attribute value & sets the attribute value

Java gets the attribute array of the class & gets the attribute value & sets the attribute value

1. Introduction to Knowledge Points

1. Get the attribute array of the class

Field[] fields = TicketOrder.class.getDeclaredFields(); // 获取类的属性数组
for (Field f : fields) {
    
    
    System.out.println(f.getName()); // 打印属性名
}

2. Obtain attribute value: Obtain attribute value through instance object and attribute name

    /**
     * 获取属性值:通过实例对象和属性名的方式获取属性值
     *
     * @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. Set attribute value: set the attribute value by means of instance object, attribute name and attribute value

    /**
     * 设置属性值:通过实例对象、属性名和属性值的方式设置属性值
     *
     * @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. Application cases

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();
        }
    }
}

Output result:

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

Guess you like

Origin blog.csdn.net/Shipley_Leo/article/details/131111943