การแสดงออก Java 8 แลมบ์ดา
การแสดงออกแลมบ์ดายังสามารถเรียกว่าปิดซึ่งคือการส่งเสริมคุณลักษณะใหม่ที่สำคัญที่สุดของ Java 8 ปล่อย
แลมบ์ดาได้รับอนุญาตให้ทำงานเป็นพารามิเตอร์ของวิธีการที่ (ฟังก์ชั่นผ่านเป็นพารามิเตอร์เข้าสู่วิธีการที่ก)
การแสดงออกแลมบ์ดาสามารถทำให้การใช้งานของรหัสที่จะกลายเป็นง่ายขึ้นและมีขนาดกะทัดรัด
ไวยากรณ์
แลมบ์ดาไวยากรณ์การแสดงออกเป็นดังนี้:
(parameters) -> expression 或 (parameters) ->{ statements; }
ต่อไปนี้เป็นลักษณะที่สำคัญของการแสดงออกแลมบ์ดา:
- ค่าพารามิเตอร์ประจำตัวประชาชนไม่จำเป็นต้องประกาศชนิดของพารามิเตอร์คอมไพเลอร์สามารถแบบครบวงจร: ตัวเลือกประกาศประเภท
- พารามิเตอร์ตัวเลือกในวงเล็บ: พารามิเตอร์ที่กำหนดไว้โดยไม่ต้องวงเล็บ แต่จำนวนของพารามิเตอร์ที่จะต้องมีการกำหนดไว้ในวงเล็บ
- วงเล็บตัวเลือก: ถ้าร่างกายมีคำสั่งที่คุณไม่จำเป็นต้องจัดฟัน
- คำหลักผลตอบแทนทางเลือก: ถ้าเรื่องเป็นเพียงหนึ่งในการแสดงออกที่ส่งกลับค่าคอมไพเลอร์จะกลับค่าวงเล็บต้องระบุแสดงออกชัดเจนว่าส่งกลับค่า
แลมบ์ดาแสดงออกตัวอย่าง
ในแฟ้ม Java8Tester.java ป้อนรหัสต่อไปนี้:
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); } }
การดำเนินงานของสคริปดังกล่าวข้างต้นออกเป็น:
$ javac Java8Tester.java $ java Java8Tester 10 + 5 = 15 10 - 5 = 5 10 x 5 = 50 10 / 5 = 2 Hello w3big Hello Google
ใช้การแสดงออกแลมบ์ดาที่จะต้องทราบจุดต่อไปนี้:
- การแสดงออกแลมบ์ดาใช้เป็นหลักในการเชื่อมต่อสายความละเอียดวิธีการที่จะดำเนินการเช่นวิธีง่ายๆในการติดต่อ ในตัวอย่างข้างต้นเราจะใช้ประเภทต่างๆของการแสดงออกแลมบ์ดาเพื่อกำหนดวิธีการ MathOperation อินเตอร์เฟซ จากนั้นเรากำหนดดำเนินการ sayMessage
- แลมบ์ดาแสดงออกวิธีการที่ไม่ระบุชื่อจะช่วยลดความยุ่งยากในการใช้งานของฟังก์ชั่นและได้รับของ Java ที่เรียบง่าย แต่มีประสิทธิภาพความสามารถในการเขียนโปรแกรม
ขอบเขตตัวแปร
การแสดงออกแลมบ์ดาสามารถอ้างถึงตัวแปรท้องถิ่นสุดท้ายหรือรอบสุดท้ายซึ่งหมายความว่าคุณไม่สามารถแก้ไขคำนิยามของตัวแปรนอกเขตอำนาจแลมบ์ดาภายในข้อผิดพลาดรวบรวมไว้เป็นอย่างอื่น
ในแฟ้ม Java8Tester.java ป้อนรหัสต่อไปนี้:
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); } }
การดำเนินงานของสคริปดังกล่าวข้างต้นออกเป็น:
$ javac Java8Tester.java $ java Java8Tester Hello! w3big