It is just a hack, and usally protect private field from access using security manager.
public class ReflectField { protected String test = "test string in class ReflectField!";} |
/** * subclass of ReflectField * * 通过子类把父类的test字段隐藏掉,不让反射获取到其值 * 正确的应该是用java的security manager来管理 */import java.lang.reflect.Field;public class ReflectExtendsField extends ReflectField { // protected String test = "test string in class ReflectExtendsField!"; private String test = "test string in class ReflectExtendsField!"; public static void main(String[] args) throws Exception { // Class ref = Class.forName("ReflectExtendsField"); Class ref = ReflectExtendsField.class; Field[] fields = ref.getFields(); System.out.println(fields.length); for (Field field : fields) { field.setAccessible(true); System.out.println(field.get(ref)); } Field testField = ref.getDeclaredField("test"); testField.setAccessible(true); System.out.println(testField); System.out.println(testField.get(ref)); }} |