6

全て、

使用しているライブラリのバグのため、特定のクラスを拡張するすべてのオブジェクトでdispose()メソッドをオーバーライドし、それをNO-OPにする必要があります。クラスの新しいインスタンスを直接作成している場合、これは簡単に実行できることを知っています。

layerManager = new LayerManagerLayer(wwd) {
    @Override
    public void dispose() {}
};

問題は、取得するオブジェクトインスタンスの多くが、クライアントコードによって直接構築されるのではなく、静的ライブラリメソッド呼び出しを介して作成されることです。

// Here I want to override the dispose method, but I cannot.
Layer l = ShapefileLoader.makeShapefileLayer(this.getClass().getResource("polylines10.shp"));

元のソースコードを変更せずに、静的に作成されたオブジェクトにdisposeメソッドを挿入する方法はありますか?

4

2 に答える 2

5

クライアントが独自のコードをコンパイルする場合は、AspectJを使用してYour around dispose()メソッドを挿入できます。他のオプションは、cglibのようないくつかのバイトコード変更ツールです。このリストを見てください:http: //java-source.net/open-source/bytecode-libraries

于 2010-05-26T19:24:32.850 に答える
1

Javassistのようなバイトコード操作ライブラリを使用できます。基本的に、LayerManagerLayerクラスのバイトコードをフェッチし、それにdisposeメソッドを挿入する必要があります。

于 2010-05-26T19:28:12.070 に答える