Java反射类private私有变量Map并赋值

Java反射类private私有变量Map并赋值

import java.util.LinkedHashMap;
import java.util.Map;

public class MyObj {
    private String KEY = "NAME";

    //目标是通过反射在外部访问cache
    private Map cache = new LinkedHashMap<>();

    public MyObj() {
        cache.put(KEY, "fly");
    }

    public void print() {
        System.out.println(cache.get(KEY));
    }
}

import java.lang.reflect.Field;
import java.util.Map;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        MyObj obj = new MyObj();
        System.out.println("反射前");
        obj.print();
        System.out.println("===");

        try {
            Field privateField = MyObj.class.getDeclaredField("cache");
            privateField.setAccessible(true);

            Map map = (Map) privateField.get(obj);

            System.out.println("-");
            Set sets = map.keySet();
            Object[] keys = sets.toArray();
            for (Object k : keys) {
                System.out.println("遍历key-旧值:" + k + "->" + map.get(k.toString()));

                //对MyObj里面的cache设置新值。
                map.put(k, "phil");
            }
            System.out.println("--");


            System.out.println("反射后");
            obj.print();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

Java反射改变Android属性_android 反射修改变量值_zhangphil的博客-CSDN博客Java反射改变Android属性在某些情况下,Android体系里面的某些对象没有对外提供针对某个属性或者类,方法公开的get或者set方法,但是项目需要对这些需要修改和调整。就需要使用Java的反射机制修改Android的属性。举一个简单的例子,通过Java反射机制改变Android ListView分割线的高度值。Android的ListView本身有分割线,并对外提供了公开设置分割线高度的_android 反射修改变量值https://blog.csdn.net/zhangphil/article/details/80138465

Java反射类Class,反射方法Method以及反射变量Field_zhangphil的博客-CSDN博客Java反射类Class,反射方法Method以及反射变量Fieldimport com.orhanobut.logger.Logger;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.ArrayList;public class JavaActivity extends A...https://blog.csdn.net/zhangphil/article/details/80185335

kotlin类成员变量字段field的get/set_zhangphil的博客-CSDN博客kotlin类成员变量字段field的get/set。https://blog.csdn.net/zhangphil/article/details/129233934

你可能感兴趣的:(Java,java)