Ich versuche, eine kompilierte Klasse zu modifizieren (Quellcode ist nicht verfügbar), die ich zum Beispiel alle Verweise auf java.lang.Object
zu some.packageName.SomeClass
ändern möchte.Ändern Sie alle Klassenreferenzen in einer kompilierten Klasse
von Referenzen, die ich meine:
- Feldtypen
- Methoden Rückgabetypen
- Methoden Argumenttypen
- Supertype
- Variablen-Typen in Methodenrümpfe
- Statische Klassenreferenzen (zB
java.lang.Object.class
) - Gene ric Typparameter
- Etc.
Grundsätzlich von diesem Beispiel should't die modifizierte Klasse Lage sein, direkt die java.lang.Object
Klasse zugreifen, sondern nur durch some.packageName.SomeClass
. Bitte beachten Sie, dass die Beispielklasse eine beliebige Klasse aus der JRE sein kann oder nicht. Der angegebene Ersatz verhält sich genau so, wie das Original erwartet wird.
Ist dies mit BCEL oder mit Javassist möglich? Wenn nicht, gibt es eine andere Bibliothek, die Funktionen zur Erreichung dieses Ziels bietet?
Warum sollte jemand ändern eine kompilierte Klasse? –
@Vishal Kamat, wenn du nicht weißt warum, bedeutet das, dass du es nicht brauchst. Es kann in einigen Fällen nützlich sein, zum Beispiel eine zusätzliche Methode hinzuzufügen und eine Schnittstelle in einer Klasse zu implementieren, in der Sie nicht den Quellcode haben. In meinem Fall ist nur ein Sandboxing-Test. –
In diesem Fall ist AOP dein Freund. Viele Sachen darin, genau das zu tun, was du erwähnt hast –