如何更改父类中的私有字段

时间:2013-03-08 11:49:43

标签: java reflection private

我使用Vaadin框架并希望覆盖某些行为。

问题是,字段的所有setter都有副作用,我不想调用它。

出于这个原因,我想直接设置私有字段。

这是我的代码:

@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作为需要更改字段的对象,而是其他一些参考。
我做错了什么?

1 个答案:

答案 0 :(得分:9)

首先需要make it accessible

privateField.setAccessible(true);
privateField.set(this, itemDataSource);
相关问题