所有
由于我正在使用的库中存在错误,我需要在扩展某个类的所有对象上覆盖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方法注入静态创建的对象而不修改原始源代码?
答案 0 :(得分:5)
如果客户端编译自己的代码,您可以使用AspectJ注入您的dispose()方法。 其他选项是一些字节码修改工具,如cglib。看看这个清单: http://java-source.net/open-source/bytecode-libraries
答案 1 :(得分:1)
您可以使用像Javassist这样的字节码操作库。您需要基本上获取LayerManagerLayer类的字节代码并将dispose方法注入其中。