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 回答