Java通过反射修改属性值,属性是引用对象


package com.example.demo.model;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;

public class Dog {
    private Name dogName;

    public Name getName() {
        return dogName;
    }

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

    @Override
    public String toString() {
        return "Dog{" +
                "dogName=" + dogName +
                '}';
    }

    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
     //设置复杂对象 Dog dog
= new Dog(); Name name = new Name(); name.setMiddleName("WW"); dog.setName(name);
     //获取到dog的属性dogName Field dogName
= dog.getClass().getDeclaredField("dogName");
     //设置权限为可修改 dogName.setAccessible(
true);
     //获取dogName对象 Object dogNameObj
= dogName.get(dog);
     //获取doName的属性middleName Field middleName
= dogNameObj.getClass().getDeclaredField("middleName");
     //设置权限为可修改 middleName.setAccessible(
true);
     //修改middleName的值 middleName.
set(dogNameObj,"kk"); System.out.println(dog); } }
package com.example.demo.model;

public class Name {
    private String middleName;

    public String getMiddleName() {
        return middleName;
    }

    public void setMiddleName(String middleName) {
        this.middleName = middleName;
    }

    @Override
    public String toString() {
        return "Name{" +
                "middleName='" + middleName + '\'' +
                '}';
    }
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM