wie man eine Klasse zur Laufzeit mit Reflektion erweitert

8

Stellen Sie sich vor, ich hätte zwei Klassen A und B, B erweitert A, wie

%Vor%

In meinem Fall ist Klasse A jedoch verschlüsselt und kann nur von meinem ClassLoader zur Laufzeit geladen werden (zur Kompilierzeit kann A.class nicht als .class-Datei erkannt werden, da sie verschlüsselt ist). Dies bedeutet, dass Klasse A zur Kompilierungszeit nicht existiert.

Meine Fragen sind:

  1. Wie kann der Code für Klasse B geschrieben werden, da einige Methoden die Methoden in Klasse A überschreiben?
  2. Wie kann ich angeben, dass Klasse B zur Laufzeit zur Klasse A erweitert wird?
user733172 01.05.2011, 10:07
quelle

2 Antworten

8

Sie können nicht mit Reflexion. Aber Sie können mit CGLIB und vielleicht Javassist

    
Bozho 01.05.2011 10:09
quelle
3

Sie können eine Dummy-Kopie von A erstellen, die alle Methoden enthält, die Sie überschreiben und nur B kompilieren und implementieren möchten.

Wenn Sie nicht wissen, welche Methoden Sie bis zur Laufzeit außer Kraft setzen möchten, müssen Sie Code mit der Compiler-API generieren. Eine Bibliothek wie die ASM von Objectweb ist jedoch wahrscheinlich einfacher. Ich bevorzuge ASM, weil es leicht Code erzeugen kann, um das zu erzeugen, was Sie von einer Schablone wünschen. Sie müssen nicht den gesamten Code selbst schreiben.

    
Peter Lawrey 01.05.2011 11:13
quelle

Tags und Links