Java 反射实现自动化赋值

本文介绍使用Java反射机制为Person类的实例动态赋值的方法,并实现比较接口完成对象排序。通过反射获取类的构造方法及字段信息,利用现有实例进行属性值的复制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package demo;

import java.util.Objects;

public class Person implements Comparable<Person> {
    @Override
    public int compareTo(Person o) {
        //return 0; //相同返回 0
        //return this.getAge() - o.getAge(); //排序规则--升序排序
        return o.getAge() - this.getAge(); //降序
    }

    private String name;
    private int age;

    public Person() {}

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

    private Person(String name) {
        this.name = name;
    }

    public Person(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}' + '\n';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
Person newP = new Person("Jungle", 26); //已经准备好的本地数据

反射赋值 

        Class<?> Class_Person = Class.forName("demo.Person");
        Constructor<?> con = Class_Person.getConstructor(); //获得构造函数
        Object obj = con.newInstance(); //构造实例
        if (obj instanceof Person) { //向下转型一定要判断
            Person person = (Person)obj; //obj本来就是Person类型才可以这样向下转型
            //对该实例赋值
            Field[] fields = Class_Person.getDeclaredFields(); //获得字段数组
            for (Field field : fields) {
                field.setAccessible(true);
                //字段如何自动化赋值 ?
                //System.out.println(newP.getClass().getMethod("get" + field.getName().substring(0,1).toUpperCase() + field.getName().substring(1)).invoke(newP));
                String sMethodName = "get" + field.getName().substring(0,1).toUpperCase() + field.getName().substring(1);
                field.set(person, newP.getClass().getMethod(sMethodName).invoke(newP));
            }
            System.out.println(person);
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值