Es ist in plain Java möglich, eine Methode einer Klasse programmgesteuert zur Laufzeit zu überschreiben (oder sogar eine neue Methode zu erstellen)?Java-Reflektion: Wie überschreibe oder generiere ich Methoden zur Laufzeit?
Ich möchte in der Lage sein, dies zu tun, auch wenn ich nicht kennen die Klassen zur Kompilierzeit.
Was ich genau damit meine zur Laufzeit überschrieben:
abstract class MyClass{
public void myMethod();
}
class Overrider extends MyClass{
@Override
public void myMethod(){}
}
class Injector{
public static void myMethod(){ // STATIC !!!
// do actual stuff
}
}
// some magic code goes here
Overrider altered = doMagic(
MyClass.class, Overrider.class, Injector.class);
Nun, diese Aufruf ...
altered.myMethod();
... nennen würde Injector.myMethod() statt Stoßstangen .myMethod().
Injector.myMethod() ist statische, weil nach der „Magie“ zu tun es aus verschiedenen Klasseninstanz aufgerufen wird (es ist die Stoßstangen), (so verhindern wir es den Zugriff auf lokale Felder).
Können Sie uns sagen, welche Art von Objekten Sie überschreiben möchten? Auf den zweiten Blick erinnert mich Ihr Problem an das Ziel des Abhängigkeits-Injektionsparadigmas. – akarnokd