Hallo,
ich habe einen eigenen Classloader geschrieben und frage mich nun ob man dann eigentlich nur noch Klassen mit „leerem“ Konstruktor benutzen kann, weil wenn ich den Weg über
ClassLoader.loadClass("…").newInstance() gehe, dann benutzt da ja einen no-arg-Konstruktor. Kann man da was machen?
Und kann man eigentlich den System ClassLoader überschreiben, also dass bei „new“ meiner verwendet wird (der ja per delegation auch erst den bootstrap loader benutzt)
Hallo,
ich habe einen eigenen Classloader geschrieben und frage mich
nun ob man dann eigentlich nur noch Klassen mit „leerem“
Konstruktor benutzen kann, weil wenn ich den Weg über
ClassLoader.loadClass("…").newInstance() gehe, dann benutzt
da ja einen no-arg-Konstruktor. Kann man da was machen?
jupp, lies der den Auszug aus der javadoc mal durch:
getConstructor
public Constructor getConstructor(Class[] parameterTypes)
throws NoSuchMethodException,
SecurityException
Returns a Constructor object that reflects the specified
public constructor of the class represented by this Class object. The parameterTypes parameter is an array of
Class objects that identify the constructor’s formal
parameter types, in declared order.
The constructor to reflect is the public constructor of the class
represented by this Class object whose formal parameter
types match those specified by parameterTypes.
If there is a security manager, this method first
calls the security manager’s checkMemberAccess method
with this and Member.PUBLIC as its arguments. If the class is in a package, then this method also calls the security manager’s checkPackageAccess method
with the package name as its argument. Either of these calls could
result in a SecurityException.
Parameters:
parameterTypes - the parameter array
Returns:
the Method object of the public constructor that
matches the specified parameterTypes
Throws:
NoSuchMethodException - if a matching method is not found.
SecurityException - if access to the information is denied.
Since:
JDK1.1
Und kann man eigentlich den System ClassLoader überschreiben,
also dass bei „new“ meiner verwendet wird (der ja per
delegation auch erst den bootstrap loader benutzt)
das wird sehr schwierig da der new-„loader“ in native geschreiben ist und bei der Compilierung festgelegt wird. benutz einen per-processor der new durch einen Aufruf zu deinem Loader ersetzt.
cu