Alex Rivera | Logout

How to change method behaviour through reflection?

Asked 2013-04-12T08:38:31.617
36

I have a a static method in some legacy code, which is called by multiple clients. I obviously have no options to override it, or change behaviour through dependency injection. I am not allowed to modify the existing class.

What I want to do now is change the behaviour (that method - with the same signature and return type) using reflection.

Is it possible ? If not, can any design pattern rescue me ?

Thanks !

EDIT : There is some confusion on what can I change/modify. I cannot change any existing class/method - but I can add more classes to the project. The best I can do with the existing classes is annotate them. This is all done to avoid breaking anything in the existing code - which means a complete round of testing for a big project.

EDIT 2 : java.lang.Instrumentation is not available for Android - or else it sounds like a good fit !

Edit
Report

1 Answer

26

I guess you could have a look at Instrumentation class which have a method redefineClasses(ClassDefintion classDefinition).

The redefinition may change method bodies, the constant pool and attributes. The redefinition must not add, remove or rename fields or methods, change the signatures of methods, or change inheritance.

Hope this helps.

References: Javadoc

answered 2013-04-12T08:54:49.220

Your Answer