Entsprechung von anonymen C # -Methoden in Java?
In C# können Sie definieren Delegierten anonym (obwohl Sie nichts anderes als syntaktischer Zucker). Zum Beispiel, ich kann dies tun:
public string DoSomething(Func<string, string> someDelegate)
{
//Do something involving someDelegate(string s)
}
DoSomething(delegate(string s){ return s += "asd"; });
DoSomething(delegate(string s){ return s.Reverse(); });
Ist es möglich, die pass-code, wie dies in Java? Ich bin mit der Verarbeitung der Rahmen, der hat eine ganz alte version von Java (es muss nicht Generika).
InformationsquelleAutor der Frage Callum Rogers | 2009-08-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vor Java 8:
Den nächsten Java hat den Delegierten sind die einzigen Schnittstellen von Methoden. Man könnte eine anonyme innere Klasse.
Java 8 und höher:
Java 8 fügt lambda-Ausdrücke in die Sprache.
InformationsquelleAutor der Antwort Michael Lloyd Lee mlk
Nicht genau so, aber Java hat etwas ähnliches.
Sogenannte-anonyme innere Klassen.
Lassen Sie mich Ihnen ein Beispiel geben:
Es ist ein wenig Ausführlicher und erfordert eine Schnittstelle zu implementieren,
aber außer, dass es ' s ziemlich viel die gleiche Sache
InformationsquelleAutor der Antwort Gregory Mostizky
Deinem Beispiel würde dann so Aussehen in Java unter Verwendung von anomymous innere Klassen:
InformationsquelleAutor der Antwort Jesper
Da die Frage über die Verarbeitung-genaue Antwort, es gibt keine direkte Entsprechung. Aber die Verarbeitung verwendet die Java 1.4 Sprache-level und Java 1.1 eingeführt, anonyme innere Klassen, die eine grobe Näherung.
InformationsquelleAutor der Antwort John Feminella
Beispiel :
Ausgabe :
InformationsquelleAutor der Antwort ron
Haben Sie alle vergessen hier, dass ein C# - Delegat in Erster Linie - ist thread sicher.
Diese Beispiele sind nur für einen einzelnen thread App..
Die meisten modernen Apps geschrieben werden, die auf Multithreading-Konzept..
So dass niemand die Antwort, ist die Antwort.
Gibt es nicht ein äquivalent in Java
InformationsquelleAutor der Antwort