ให้ฉันเสนอมุมมองเกี่ยวกับสาเหตุที่เราเพิ่มคุณลักษณะนี้ลงในภาษาเมื่อเห็นได้ชัดว่าเราไม่จำเป็นต้องทำอย่างเคร่งครัด (วิธีการอ้างอิงทั้งหมดสามารถแสดงเป็น lambdas ได้)
ทราบว่ามีคำตอบไม่เหมาะสม ใครก็ตามที่ระบุว่า "ใช้ method ref แทน lambda เสมอ" หรือ "always use a lambda แทน method ref" ควรละเว้น
คำถามนี้มีความคล้ายคลึงกับ "เมื่อใดที่ฉันควรใช้คลาสที่มีชื่อเทียบกับคลาสที่ไม่ระบุตัวตน" และคำตอบก็เหมือนกันเมื่อคุณพบว่ามันอ่านง่ายขึ้น มีหลายกรณีที่แน่นอนอย่างใดอย่างหนึ่ง แต่มีโฮสต์ของสีเทาอยู่ตรงกลางและต้องใช้วิจารณญาณ
ทฤษฎีที่อยู่เบื้องหลัง refs วิธีการง่ายๆคือ: ชื่อเรื่อง หากเมธอดมีชื่อให้อ้างถึงด้วยชื่อแทนที่จะใช้ถุงรหัสที่จำเป็นซึ่งในที่สุดก็หมุนไปรอบ ๆ และเรียกใช้มันมักจะชัดเจนและอ่านง่ายกว่า (แต่ไม่เสมอไป!)
ข้อโต้แย้งเกี่ยวกับประสิทธิภาพหรือเกี่ยวกับการนับตัวอักษรส่วนใหญ่เป็นปลาชนิดหนึ่งสีแดงและคุณควรเพิกเฉยต่อสิ่งเหล่านี้ เป้าหมายคือการเขียนโค้ดที่ชัดเจนว่ามันทำอะไร บ่อยมาก (แต่ไม่เสมอไป!) วิธีการอ้างอิงจะชนะในเมตริกนี้ดังนั้นเราจึงรวมไว้เป็นตัวเลือกเพื่อใช้ในกรณีเหล่านั้น
การพิจารณาที่สำคัญเกี่ยวกับว่าวิธีการที่อ้างถึงชี้แจงหรือเจตนาทำให้สับสนคือเห็นได้ชัดจากบริบทว่ารูปร่างของฟังก์ชันที่แสดงเป็นอย่างไร ในบางกรณี (เช่นmap(Person::getLastName)
มันค่อนข้างชัดเจนจากบริบทที่จำเป็นต้องมีฟังก์ชั่นที่จับคู่สิ่งหนึ่งกับอีกสิ่งหนึ่งและในกรณีเช่นนี้การอ้างอิงเมธอดจะเปล่งประกายในกรณีอื่น ๆ การใช้ method ref ต้องการให้ผู้อ่านสงสัยว่าประเภทใด กำลังอธิบายถึงฟังก์ชันนี่เป็นสัญญาณเตือนว่าแลมด้าอาจอ่านได้ง่ายขึ้นแม้ว่าจะยาวกว่าก็ตาม
ในที่สุดสิ่งที่เราพบก็คือในตอนแรกคนส่วนใหญ่มักหลีกเลี่ยง method refs เพราะพวกเขารู้สึกว่าใหม่กว่าและแปลกกว่า lambdas และเริ่มพบว่าพวกเขา "อ่านได้น้อยกว่า" แต่เมื่อเวลาผ่านไปเมื่อพวกเขาคุ้นเคยกับไวยากรณ์ โดยทั่วไปจะเปลี่ยนพฤติกรรมและโน้มน้าวไปสู่การอ้างอิงวิธีการเมื่อทำได้ ดังนั้นโปรดทราบว่าปฏิกิริยาที่ "อ่านได้น้อยกว่า" ที่เป็นอัตวิสัยของคุณเองเกือบจะแน่นอนว่ามีความลำเอียงในเรื่องครอบครัวและคุณควรให้โอกาสตัวเองในการทำความคุ้นเคยกับทั้งสองอย่างก่อนที่จะแสดงความคิดเห็นเกี่ยวกับโวหาร