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