Java反射类private私有变量Map并赋值
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);
}
}
}