【问题标题】:How to change a private field in a parent class如何更改父类中的私有字段
【发布时间】:2013-03-08 11:49:43
【问题描述】:

我使用了 Vaadin 框架并想覆盖一些行为。

问题是一个字段的所有设置器都有我不想调用的副作用。

因此我想直接设置私有字段。

这是我的代码:

@Override
public void setItemDataSource(Item itemDataSource) {
    //do some stuff
    java.lang.reflect.Field privateField = this.getClass().getDeclaredField(itemDatasource); //Yes the spelling is correct.
    privateField.set(this, itemDataSource);   <<-- I get an error.
    //do more stuff

我收到以下错误。

//TODO: 复制粘贴错误。

显然,我不应该将 this 作为需要更改字段的对象,而是包含其他一些参考。
我做错了什么?

【问题讨论】:

  • 您能发布完整的异常跟踪吗?我假设即使您必须这样做,您也没有为私有字段设置可见性修饰符以允许这样做。但是,我必须说,我不鼓励做这样的事情......(Aw. Assylias 以微弱优势击败了我 :))

标签: java reflection private


【解决方案1】:

你需要先make it accessible

privateField.setAccessible(true);
privateField.set(this, itemDataSource);

【讨论】:

    猜你喜欢
    • 2014-04-29
    • 2021-12-15
    • 1970-01-01
    • 2013-01-26
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    相关资源
    最近更新 更多