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 + '\'' +
                '}';
    }
}

 

posted @ 2021-01-24 12:44  infiniteaaaaa  阅读(900)  评论(0)    收藏  举报