当前位置:  开发笔记 > 编程语言 > 正文

破坏java访问控制并让我访问私有成员变量的库?

如何解决《破坏java访问控制并让我访问私有成员变量的库?》经验,为你挑选了1个好方法。

anoyne可以推荐一个好的库,让我可以轻松读/写一个类的私有成员字段吗?我正在浏览apache的公地,但看不到它.我一定是瞎了?

编辑:在合法性边界提出问题总是给出"为什么"这些问题?我正在为hotswapping类编写几个javarebel插件.访问私有变量只是第1步,我甚至可能必须替换某些方法的实现.



1> sakana..:

在大多数情况下,java 反射解决了这个问题:

例:

public class Foo {

    /**
     * Gets the name Field.
     * 
     * @return the name
     */
    public final String getName() {
        return name;
    }

    /**
     * Sets the name Field with the name input value.
     * 
     * @param name the name to set
     */
    public final void setName(String name) {
        this.name = name;
    }

    private String name;

}

现在反思代码:

import java.lang.reflect.Field;
....

Foo foo = new Foo();
foo.setName("old Name");
String fieldName = "name";
Class class1 = Foo.class;

try {

    System.out.println(foo.getName());

    Field field = class1.getDeclaredField(fieldName);

    field.setAccessible(true);

    field.set(foo, "My New Name");

    System.out.println(foo.getName());

} catch (NoSuchFieldException e) {
    System.out.println("FieldNotFound: " + e);
} catch (IllegalAccessException e) {
    System.out.println("Ilegal Access: " + e);
}

更新:

值得一提的是,SecurityManager可以阻止这种方法. - 丹戴尔

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有