2016-04-07 7 views
2

Ich versuche ein Programm in Java zu verstehen, das Lambda verwendet hat, um ein Objekt in die Referenzvariable einer Schnittstelle zurückzugeben. Ich möchte Lambda in einfache Java-Funktion konvertieren, aber nicht sicher, wie es geht.Wie konvertiert Lambda in einfache Java-Funktion

Das Programm ist wie folgt: -

public abstract class Performance implements Serializable 
{ 
Iterface_name vehicle =(Iterface_name & Serializable)() ->{return new Object();}; 
Object speed() 
{ 
    return vehicle.speed(); 
} 
} 

Die Schnittstelle ist wie folgt: - ohne Verwendung von Lambda-Lern

public interface Iterface_name 
{ 
Object speed(); 
} 

Wie dieses Programm in eine einfache Java-Programm zu konvertieren. Bitte helfen Sie.

Antwort

1

Sie könnten Lambda-Ausdruck durch Ihre eigene Implementierung der Iterface_name Schnittstelle ersetzen.

class Interface_name_impl implements Iterface_name { 
    @Override 
    public Object speed() { 
     return new Object(); 
    } 
} 

Anschließend können Sie Ihre Anweisung ersetzen, die Lambda-Ausdruck verwendet, um mit

Iterface_name vehicle = new Interface_name_impl(); 

können Sie auch mit aus anonymen Klassen verwenden ausdrücklich die obige Klasse, die Iterface_name

Iterface_name vehicle1 = new Iterface_name() { 
    @Override 
    public Object speed() { 
     return new Object(); 
    } 
}; 

On implementiert eine andere Anmerkung, Sie könnten sogar einfach Ihre Lambda-Nutzung von

Iterface_name vehicle =(Iterface_name & Serializable)() ->{return new Object();}; 

zu

Iterface_name vehicle =() -> new Object(); 

oder noch kürzere Version ist

Iterface_name vehicle = Object::new; 

Im Fall wollen Sie verstehen, wie Lambda-Ausdrücke intern vom Compiler implementiert sind, können Sie gehen durch Java-8-Lambdas-A-Peek-Under-the-Hood

+0

Vielen Dank Madhusudana. Das ist sehr hilfreich. Ich möchte Sie fragen, ob Typecasting (Iterface_name & Serializable) einen Unterschied macht oder nicht und was (&) hier gemacht wird. – ela

+0

@ela Wenn Sie sowohl 'vehicle = (Iterface_name & Serializable) ...' verwenden, können Sie 'vehicle' in einen der oben genannten Typen eingeben. Sie können dasselbe mit dem' instanceof' Operator auf 'vehicle testen 'und es würde für beide wahr sein. Wenn Sie '' Iterface_name & Serializable '' nicht verwenden, kann es nicht in Serializable eingegeben werden und nur in 'Iterface_name' eingegeben werden. –

+0

Danke nochmal. Diese Erklärung, die du gegeben hast, löste meine Zweifel. Ich habe versucht, online nach richtigen Erklärungen zu suchen, habe aber keine. Danke vielmals. – ela

0

löschen das Feld ganz. Das ist das gleiche:

public abstract class Performance implements { 
    Object speed() { 
     return new Object(); 
    } 
} 
Verwandte Themen