以下是一个使用反射累加集合中指定字段并设置到原始对象的例子:

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) throws IllegalAccessException {
        List<Person> persons = new ArrayList<>();
        persons.add(new Person('Tom', 20, 100));
        persons.add(new Person('Jerry', 30, 200));
        persons.add(new Person('Alice', 25, 150));

        int sum = 0;
        for (Person person : persons) {
            Class<?> clazz = person.getClass();
            Field[] fields = clazz.getDeclaredFields();
            for (Field field : fields) {
                if (field.getName().equals('salary')) {
                    field.setAccessible(true);
                    int salary = (int) field.get(person);
                    sum += salary;
                }
            }
        }

        System.out.println('Total salary: ' + sum);

        for (Person person : persons) {
            Class<?> clazz = person.getClass();
            Field[] fields = clazz.getDeclaredFields();
            for (Field field : fields) {
                if (field.getName().equals('totalSalary')) {
                    field.setAccessible(true);
                    field.setInt(person, sum);
                }
            }
        }

        for (Person person : persons) {
            System.out.println(person);
        }
    }

    static class Person {
        private String name;
        private int age;
        private int salary;
        private int totalSalary;

        public Person(String name, int age, int salary) {
            this.name = name;
            this.age = age;
            this.salary = salary;
        }

        @Override
        public String toString() {
            return 'Person{' +
                    'name=' + name + ''' +
                    ', age=' + age +
                    ', salary=' + salary +
                    ', totalSalary=' + totalSalary +
                    '}';
        }
    }
}

输出结果:

Total salary: 450
Person{name='Tom', age=20, salary=100, totalSalary=450}
Person{name='Jerry', age=30, salary=200, totalSalary=450}
Person{name='Alice', age=25, salary=150, totalSalary=450}

在这个例子中,我们首先遍历了集合中的每个 Person 对象,并通过反射获取其所有字段。然后,我们判断字段名称是否为 'salary',如果是,则累加到总工资中。接着,我们再次遍历集合中的每个 Person 对象,查找名称为 'totalSalary' 的字段,并将总工资设置到该字段中。最后,我们格式化输出每个 Person 对象。

Java 反射累加集合字段并回设:高效处理数据聚合

原文地址: https://www.cveoy.top/t/topic/lrAc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录