2016-04-17 17 views
0

Ich habe diese Schnittstelle:Ist es möglich, ein neues Objekt mit Lambda anstelle einer anonymen Klasse zu erstellen?

public interface Result 
{ 
    public Path path(); 
    public int line(); 
} 

Ich möchte eine Arraylist der Ergebnisse schaffen, und es funktioniert gut dies zu tun:

list.add(new Result{ 
    @Override 
    path(){ 
     return "some string"; 
    } 
    @Override 
    line(){ 
     return 1; // some integer 
    } 

}); 

Ich bin neu in Lambda-Ausdrücke, und ich habe zu implementieren versucht dies verwendet stattdessen ein Lambda, aber ich kann nicht scheinen, dass die Syntax richtig ist. Ist es überhaupt möglich?

Antwort

2

Sie können nur Lambda-Ausdrücke verwenden, um Schnittstellen mit einer einzigen abstrakten Methode (d. H. Funktionale Schnittstellen) zu implementieren.

Da Ihre Schnittstelle Result über zwei Methoden verfügt, kann sie nicht mit einem Lambda-Ausdruck implementiert werden.

+0

Das dachte ich, aber ich war immer noch verwirrt darüber. Vielen Dank. Ist eine anonyme innere Klasse der beste Weg, diese Liste zu erstellen? – yeahboy

+0

@yeahboy Sie können auch reguläre Klassen verwenden, die 'Result' implementieren. Ich denke, der beste Weg ist eine Frage der Meinung und hängt von Ihrem spezifischen Anwendungsfall ab. – Eran

+0

Ich verstehe. Danke, das beantwortet meine Fragen :) – yeahboy