Gibt es eine Möglichkeit, eine Methode zur Laufzeit zu überschreiben? auch wenn es erfordert, dynamisch eine Unterklasse von dieser Instanz zu erstellen?
Mit einfachem Java, nein.
Mit asm oder cglib oder aspectj , ja.
Im normalen Java ist es in einer Situation wie dieser, ein interface-basierter Proxy , der den Methodenaufruf verarbeitet und an das ursprüngliche Objekt delegiert (oder nicht).
Sie könnten eine anonyme Klasse erstellen, die die Methode überschreibt und die Strategie-Muster , um zu entscheiden, was zu tun ist.
Wenn Sie nach einer dynamischen Kompilierung aus Code suchen, können Sie diese Anweisungen
befolgen > Wie andere sagten, nein, Sie können eine Methode zur Laufzeit nicht überschreiben. Ab Java 8 können Sie jedoch den funktionalen Ansatz wählen. Function
ist eine funktionale Oberfläche, die Sie behandeln können funktioniert als Referenztypen. Dies bedeutet, dass Sie mehrere erstellen und zwischen ihnen (dynamisch) a-la-Strategie-Muster wechseln können.
Schauen wir uns ein Beispiel an:
%Vor%Ausgabe:
11
9
Ich weiß nicht, unter welchen Umständen und mit welchem Design Sie übersteuern wollen, aber der Punkt ist, dass Sie das Verhalten der Methode ersetzen, was das Überschreiben ist.