开发者

Overriding a method in statically created objects

All,

Due to a bug in a library I'm using, I need to override the dispose() method on all objects extending a certain class and make it a NO-OP. I know that if I'm making new instances of the classes directly, this is easy to do:

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

The problem is that a lot of the object instances I get are not directly constructed by my client code, but instead are created via static library method calls.

// Here I want to override the dispose method, but I cannot.
Layer l = ShapefileLoader.makeShapefileLayer(this.getClass().getResource开发者_如何学C("polylines10.shp"));

Is there a way I can inject my dispose method into that statically created object without modifying the original sourcecode?


If client compiles his own code, You can use AspectJ to inject Your around dispose() method. Other options are some bytecode modification tools like cglib. Look at this list: http://java-source.net/open-source/bytecode-libraries


You can use a byte code manipulation library like Javassist. You need to basically fetch the byte code of your LayerManagerLayer class and inject dispose method to it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜