4

Vaadin フレームワークを使用しており、いくつかの動作をオーバーライドしたいと考えています。

問題は、フィールドのすべてのセッターに、呼び出したくない副作用があることです。

このため、private フィールドを直接設定したいと考えています。

これが私のコードです:

@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、フィールドを変更する必要があるオブジェクトとして含めることは想定されていませんが、他の参照です。
私は何を間違っていますか?

4

1 に答える 1

9

最初にアクセス可能にする必要があります。

privateField.setAccessible(true);
privateField.set(this, itemDataSource);
于 2013-03-08T11:51:17.003 に答える