Ist es möglich, eine Methode zur Laufzeit zu überschreiben?

8

Gibt es eine Möglichkeit, eine Methode zur Laufzeit zu überschreiben? auch wenn es erfordert, dynamisch eine Unterklasse von dieser Instanz zu erstellen?

    
Maxwell Dergosits 25.11.2011, 19:57
quelle

5 Antworten

8

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).

    
Sean Patrick Floyd 25.11.2011, 19:58
quelle
2

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 >     
Kevin Coulombe 25.11.2011 20:04
quelle
0

Sie meinen so etwas: Ссылка

    
rodrigoap 25.11.2011 19:59
quelle
0

Ich denke, das ist mit einfachem Java nicht möglich. Mit Reflektion und / oder Cglib können Sie es wahrscheinlich tun.

Sehen Sie sich diese Links an:
Ссылка
Ссылка

    
Ricardo Silva 25.11.2011 20:04
quelle
0

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.

    
user1803551 09.02.2017 12:15
quelle

Tags und Links