Clase de reflexión de Java privado privado variable Mapa y asignación

Clase de reflexión de Java privado privado variable Mapa y asignación

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

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

    //目标是通过反射在外部访问cache
    private Map<String, String> 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<String> 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);
        }
    }
}

La reflexión de Java cambia las propiedades de Android_la reflexión de Android cambia los valores de las variables_el blog de zhangphil-CSDN blog La reflexión de Java cambia las propiedades de Android En algunos casos, algunos objetos en el sistema Android no proporcionan métodos de obtención externos para ciertas propiedades o clases, o el método set, pero el proyecto necesita modificar y ajustar estos. Debe usar el mecanismo de reflexión de Java para modificar las propiedades de Android. Para dar un ejemplo simple, cambie el valor de altura de la línea divisoria de Android ListView a través del mecanismo de reflexión de Java. El propio ListView de Android tiene una línea divisoria y proporciona un valor de variable de modificación de reflexión _android que establece públicamente la altura de la línea divisoria https://blog.csdn.net/zhangphil/article/details/80138465

Clase de reflexión Java Clase, método de reflexión Método y variable de reflexión Field_zhangphil's blog-CSDN blog Clase de reflexión de Java Clase, método de reflexión Método y variable de reflexión Fieldimport com.orhanobut.logger.Logger;import java.lang.reflect.Field;import java.lang . reflect.Method;importar java.util.ArrayList;la clase pública JavaActivity extiende A... https://blog.csdn.net/zhangphil/article/details/80185335

campo de variable de miembro de clase kotlin get/set_blog de zhangphil - blog de CSDN campo de campo de variable de miembro de clase kotlin get/set. https://blog.csdn.net/zhangphil/article/details/129233934

Supongo que te gusta

Origin blog.csdn.net/zhangphil/article/details/131935002
Recomendado
Clasificación