2017-11-06 4 views
3

Ich bin ein bisschen neugierig darauf, wie die in JShell deklarierte Methode unter der Haube implementiert wird.In JShell deklarierte Methode sind Lambdas?

z.

int add(int x,int y){ 
return x+y; 
} 

ist oben deklarierte Methodeninstanz von BiFunction? Kann eine dumme Frage sein, aber nur aus Neugier.

+2

Es ist nur ein ['MethodSnippet'' (https://docs.oracle.com/javase/9/docs/api/jdk/jshell/MethodSnippet.html) und ich glaube, da JShell in erster Linie auf 'Snippet' (https://docs.oracle.com/javase/9/docs/api/jdk/jshell/Snippet.html) und seine Auswertung. Ich würde Sie bitten, seine Typen/Unterklassen zu lesen. Wahrscheinlich hoffe ich, dass die Frage nicht zu der Frage kommt, wie JShell Snippets auswertet. – nullpointer

Antwort

3

Das ist eine einfache übliche Methode, warum würde es als BiFunction erstellt werden? es sei denn, Sie sagen es natürlich.

Es gibt eine Top-Level-Klasse namens jdk.jshell.JShell, die diese Methode (oder einen anderen Status) enthält; aber man kann es nicht eine Methode Referenz zu deklarieren verwenden:

jshell> int add(int x, int y) { return x + y; } 

Bedeutung dies nicht funktionieren würde:

jshell> BiFunction<Integer, Integer> by = JShell::add; // or this::add 

Sie müssen würde wickeln, dass add Methode in einer Klasse:

jshell> class Foo { static int add(int x, int y) { return x + y; } ... 

Und dann zuweisen:

jshell> BiFunction<Integer, Integer, Integer> bi = Foo::add; 
     bi ==> $Lambda$15/[email protected] 
+0

wo kann ich die Details für jdk.jshell.Jshell Klasse erhalten, wird jeder Link sehr geschätzt? – optional

+2

@Mukeshkumarsaini hast du versucht zu googeln? ernsthaft, die ersten 10 Suchen würden ein sehr großes Bild darüber geben – Eugene

+1

https://docs.oracle.com/javase/9/docs/api/jdk/jshell/package-summary.html hab es hier dank – optional