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("polylines10.shp"));
Is there a way I can inject my dispose method into that statically created object without modifying the original sourcecode?
Can we override a static method? No, we cannot override static methods because method overriding is based on dynamic binding at runtime and the static methods are bonded using static binding at compile time. So, we cannot override static methods.
Overloading is the mechanism of binding the method call with the method body dynamically based on the parameters passed to the method call. Static methods are bonded at compile time using static binding. Therefore, we cannot override static methods in Java.
Can we Override static methods in java? We can declare static methods with the same signature in the subclass, but it is not considered overriding as there won't be any run-time polymorphism. Hence the answer is 'No'.
No, they can't be overridden. They are associated with the class, not with an object. for the real use: you can call a static method without the class instance.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With