การแสดงออกของแลมบ์ดาครั้งแรก
ก่อนที่แลมบ์ดาจะปรากฏขึ้นหากเราต้องการเขียนมัลติเธรดเราอาจต้องใช้วิธีการต่อไปนี้:
runnable runnable = new runnable () {@Override public void run () {system.out.println ("Hello Runnable"); - ... thread.start ();ตัวอย่างข้างต้นจะง่ายขึ้นมากหากคุณเปลี่ยนเป็นการใช้แลมบ์ดา:
runnable noargs = ()-> system.out.println ("สวัสดี lambda! ~"); ... thread.start ();การแสดงออกของแลมบ์ดาเป็นฟังก์ชั่นที่ไม่ระบุชื่อที่ผ่านพฤติกรรมเช่นข้อมูล นิพจน์ใช้ -> เพื่อแยกพารามิเตอร์ออกจากร่างกาย -> เพื่อนำหน้าส่วนพารามิเตอร์แล้วนี่คือส่วนของร่างกาย
แลมบ์ดารูปแบบอื่น ๆ
BinaryOperator <Long> เพิ่ม = (x, y)-> x+y; // หรือ BinaryOperator <lont> เพิ่ม = (ยาว x, ยาว y)-> x+y; // หรือ binaryOperator <lont> add = (ยาว x, ยาว y)-> {x+y; -ข้างต้นเป็นรูปแบบทั้งหมดของการแสดงออกของแลมบ์ดา
แล้วคำถามคือ:
BinaryOperator <lont> เพิ่ม = (ยาว x, ยาว y)-> x+y; หมายถึง?
บรรทัดของรหัสนี้ไม่ได้พูดคุยเกี่ยวกับการเพิ่มตัวเลข แต่สร้างฟังก์ชันเพื่อคำนวณผลลัพธ์ของการเพิ่มตัวเลขสองตัว ประเภทของการเพิ่มคือ BinaryOperator <long> ซึ่งไม่ใช่ผลรวมของตัวเลขสองตัว แต่รหัสที่เพิ่มตัวเลขสองตัว ตัวอย่างต่อไปนี้แสดงวิธีใช้ตัวแปรนี้:
BinaryOperator <Long> เพิ่ม = (ยาว x, ยาว y)-> x+y; res ยาว = add.apply (3L, 4L); System.out.println ("res ="+res); // output: res = 7 อินเตอร์เฟสฟังก์ชั่น
อินเทอร์เฟซฟังก์ชั่นเป็นอินเทอร์เฟซที่มีวิธีนามธรรมเพียงวิธีเดียวที่ใช้เป็นนิพจน์ Lambda ชนิดหนึ่ง
ตัวอย่างเช่น Runnable เป็นอินเตอร์เฟสฟังก์ชั่น
สร้างอินเตอร์เฟสฟังก์ชั่นใหม่:
อินเตอร์เฟสสาธารณะ addoperator <t, d> {ยาวเพิ่ม (t one, d สอง);}ใช้:
addoperator <ยาว, ยาว> addoperator = (x, y)-> x +y; System.err.println ("ฟังก์ชั่นฟังก์ชั่นที่กำหนดเอง res ="+addoperator.add (34L, 65L)); ประเภทเป้าหมาย
ประเภทเป้าหมายหมายถึงประเภทของบริบทที่นิพจน์แลมบ์ดาอยู่ ตัวอย่างเช่นกำหนดนิพจน์แลมบ์ดาให้กับตัวแปรท้องถิ่นหรือส่งผ่านไปยังวิธีการเป็นพารามิเตอร์ ประเภทของพารามิเตอร์ตัวแปรท้องถิ่นหรือเมธอดคือประเภทเป้าหมายของนิพจน์แลมบ์ดา
สุดท้าย
หากเราอ้างอิงตัวแปรท้องถิ่นในวิธีการในคลาสภายในที่ไม่ระบุชื่อสิ่งนี้ต้องการให้ตัวแปรท้องถิ่นถือเป็นที่สิ้นสุด
ในแลมบ์ดาเราไม่จำเป็นต้องประกาศตัวแปรท้องถิ่นที่อ้างอิงถึงขั้นสุดท้าย แต่ตัวแปรสามารถกำหนดได้เพียงครั้งเดียว
ในตัวอย่างต่อไปนี้หากเราลบความคิดเห็นและกำหนดชื่ออีกครั้งมันจะไม่ถูกรวบรวมและข้อความแสดงข้อผิดพลาดจะปรากฏขึ้น: ตัวแปรท้องถิ่นที่อ้างอิงจากนิพจน์แลมบ์ดาจะต้องเป็นที่สิ้นสุดหรือสุดท้ายได้อย่างมีประสิทธิภาพ
ตัวแปรท้องถิ่นที่อ้างอิงโดยนิพจน์แลมบ์ดาจะต้องเป็นที่สิ้นสุดหรือเป็นข้อเท็จจริงสุดท้าย
ชื่อสตริง = getUserName (); // name = "hi"; button.addactionListener (event-> system.out.println ("name ="+ชื่อ)); พิมพ์การอนุมาน
การอนุมานประเภทของการแสดงออกของแลมบ์ดาเป็นส่วนขยายของการอนุมานประเภทเป้าหมายที่แนะนำใน Java7
พิมพ์การอนุมานใน Java7:
รายการ <String> list = new ArrayList <> ();
ในตัวอย่างข้างต้นเราไม่ได้ระบุประเภทกระบวนทัศน์ของ ArrayList แต่แทนที่จะอนุมานประเภทของ ArrayList ตามประเภทของรายการ
ตัวอย่างเช่น: addoperator <ยาว, ยาว> addoperator = (x, y)-> x +y;
ผ่านบทความนี้ฉันหวังว่ามันจะช่วยให้คุณเรียนรู้และเข้าใจส่วนนี้ของความรู้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!