java反射之Field demo

本文通过一个Java反射的应用案例,展示了如何利用反射机制为对象属性赋值的过程。案例中定义了一个包含多个属性的类,并通过反射机制从父类传递值到子类的相应属性中。

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

import java.util.ArrayList;
import java.util.List;
//Field反射
public class ListFiledReflect extends Fatherr{
    private String name;
    private String age;

    public ListFiledReflect(){}
    public String getName() {
        return name;
    }

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

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public static void main(String[] args) {
        MediumClas mediumClas = new MediumClas();
        System.out.println(mediumClas.getListFiledReflects().get(0).getName());
        System.out.println(mediumClas.getListFiledReflects().get(0).getAge());
        MediumClas mediumClas1 = new MediumClas();
        for (ListFiledReflect listFiledReflect:
                mediumClas1.getListFiledReflects()) {
            listFiledReflect.initialize();
        }
        System.out.println(mediumClas1.getListFiledReflects().get(0).getName());
        System.out.println(mediumClas1.getListFiledReflects().get(0).getAge());
    }
}
class MediumClas{
    public List<ListFiledReflect> getListFiledReflects() {
        return listFiledReflects;
    }

    public void setListFiledReflects(List<ListFiledReflect> listFiledReflects) {
        this.listFiledReflects = listFiledReflects;
    }

    private List<ListFiledReflect> listFiledReflects;
    public MediumClas(){
        //初始化两个对象
        this.listFiledReflects = new ArrayList<ListFiledReflect>();
        this.listFiledReflects.add(new ListFiledReflect());
        this.listFiledReflects.add(new ListFiledReflect());
    }

}

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
//对应的基类
public class Fatherr{
    List<MessageNode> nodes;

    public Fatherr(){
        //初始化设值
        this.nodes = new ArrayList<MessageNode>();
        this.nodes.add(new MessageNode("name","20"));
        this.nodes.add(new MessageNode("age","19"));
    }
    //采用属性反射为子类属性设值
    public void initialize(){
        for (MessageNode node:
                nodes) {
            try {
                System.out.println(this.getClass());
                //获取子类属性名,node.getName()对应的子类属性名称
                Field field = this.getClass().getDeclaredField(node.getName());
                //如果Accessible为false,不在其属性的作用域下就不能访问。
                field.setAccessible(true);
                //对应的值注入当前子类对应的属性中
                field.set(this,node.getValue());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

public class MessageNode {
        private String name;
        private String value;
        public MessageNode(String name,String age){
            this.name = name;
            this.value = age;
        }
        public String getName() {
            return name;
        }

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

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值