Java 8 wyrażenia lambda
wyrażenia lambda mogą być również nazywane zamknięcia, jakim jest promowanie nowych najważniejsze cechy Javy 8 wydaniu.
Lambda może działać jako parametr sposobu (funkcja jako parametr do metody).
wyrażenia lambda może wykorzystać kod staje się bardziej prosta i zwarta.
gramatyka
Składnia wyrażeń lambda jest w następujący sposób:
(parameters) -> expression 或 (parameters) ->{ statements; }
Poniżej znajdują się ważne cechy wyrażeń lambda:
- Opcjonalnie deklaracji typu: nie ma potrzeby deklarowania typów parametrów, kompilator może być ujednolicone wartości parametru identyfikacji.
- Opcjonalne parametry w nawiasach: parametr zdefiniowany bez nawiasów, ale ilość parametrów należy zdefiniować nawiasy.
- Opcjonalne szelki: jeśli ciało zawiera oświadczenie, że nie potrzeba szelki.
- Opcjonalne słowa kluczowe Powrót: Jeżeli obiekt jest tylko jedno wyrażenie, które zwraca wartość, kompilator automatycznie powróci wartość, szelki trzeba określić wyraźną ekspresję, która zwraca wartość.
Przykłady wyrażeń lambda
W pliku Java8Tester.java wprowadź następujący kod:
public class Java8Tester { public static void main(String args[]){ Java8Tester tester = new Java8Tester(); // 类型声明 MathOperation addition = (int a, int b) -> a + b; // 不用类型声明 MathOperation subtraction = (a, b) -> a - b; // 大括号中的返回语句 MathOperation multiplication = (int a, int b) -> { return a * b; }; // 没有大括号及返回语句 MathOperation division = (int a, int b) -> a / b; System.out.println("10 + 5 = " + tester.operate(10, 5, addition)); System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction)); System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication)); System.out.println("10 / 5 = " + tester.operate(10, 5, division)); // 不用括号 GreetingService greetService1 = message -> System.out.println("Hello " + message); // 用括号 GreetingService greetService2 = (message) -> System.out.println("Hello " + message); greetService1.sayMessage("w3big"); greetService2.sayMessage("Google"); } interface MathOperation { int operation(int a, int b); } interface GreetingService { void sayMessage(String message); } private int operate(int a, int b, MathOperation mathOperation){ return mathOperation.operation(a, b); } }
Realizacja powyższego scenariusza, wyjście jest:
$ javac Java8Tester.java $ java Java8Tester 10 + 5 = 15 10 - 5 = 5 10 x 5 = 50 10 / 5 = 2 Hello w3big Hello Google
Użyj wyrażeń lambda, aby zwrócić uwagę na następujące kwestie:
- wyrażenia lambda są głównie stosowane w interfejsach liniowych definicji metody do wykonania, na przykład, w prosty sposób do interfejsu. W powyższym przykładzie, używamy różnego rodzaju wyrażeń lambda zdefiniowanie metod MathOperation interfejs. Następnie określamy wykonanie sayMessage.
- Sposób wyrażenia lambda anonimowe eliminuje użycie kłopotliwy i danej funkcji Java prostych, ale potężnych możliwościach programowania.
zmienna Zakres
wyrażenia lambda może odnosić się tylko do końcowych lub końcowych zmiennych lokalnych, co oznacza, że nie można zmienić definicję zmiennych eksterytorialnej lambda wewnątrz, w przeciwnym razie błędów kompilacji.
W pliku Java8Tester.java wprowadź następujący kod:
public class Java8Tester { final static String salutation = "Hello! "; public static void main(String args[]){ GreetingService greetService1 = message -> System.out.println(salutation + message); greetService1.sayMessage("w3big"); } interface GreetingService { void sayMessage(String message); } }
Realizacja powyższego scenariusza, wyjście jest:
$ javac Java8Tester.java $ java Java8Tester Hello! w3big