覆盖静态创建的对象中的方法

时间:2010-05-26 19:07:50

标签: java override worldwind

所有

由于我正在使用的库中存在错误,我需要在扩展某个类的所有对象上覆盖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方法注入静态创建的对象而不修改原始源代码?

2 个答案:

答案 0 :(得分:5)

如果客户端编译自己的代码,您可以使用AspectJ注入您的dispose()方法。 其他选项是一些字节码修改工具,如cglib。看看这个清单: http://java-source.net/open-source/bytecode-libraries

答案 1 :(得分:1)

您可以使用像Javassist这样的字节码操作库。您需要基本上获取LayerManagerLayer类的字节代码并将dispose方法注入其中。