อินเทอร์เฟซการใช้งานเป็นอินเทอร์เฟซที่มีวิธีนามธรรมเพียงวิธีเดียว แต่สามารถมีวิธีการที่ไม่ได้ใช้หลายวิธี
อินเทอร์เฟซที่ใช้งานได้สามารถแปลงเป็นนิพจน์แลมบ์ดาโดยปริยาย
อินเทอร์เฟซที่ใช้งานได้สามารถรองรับ Lambdas ที่เป็นมิตรโดยฟังก์ชั่นที่มีอยู่
แนะนำ
อินเทอร์เฟซที่ใช้งานได้จริง ๆ แล้วเป็นคลาสอินเตอร์เฟสนามธรรม พบอินเทอร์เฟซการทำงานต่อไปนี้ก่อน Java 8
java.lang.runnablejava.util.concurrent.callablejava.util.comparator
ฯลฯ ...
วิธีใช้
ในความเป็นจริงคลาสอินเตอร์เฟสที่กล่าวถึงข้างต้นจะต้องมีการแก้ไขด้วยคำอธิบายประกอบ FunctionalInterface เท่านั้นและกลายเป็นส่วนต่อประสานการทำงานใน Java ตัวอย่างเช่นคำจำกัดความอินเตอร์เฟสที่เรียกได้ใน JDK
@functionalInterfacepublic อินเตอร์เฟส callable <v> {v call () โยนข้อยกเว้น;}มันง่ายมาก
ตอนนี้มาพูดคุยเกี่ยวกับอินเทอร์เฟซฟังก์ชั่นใหม่ที่เพิ่มลงใน Java 8 นี่คือคำจำกัดความของมัน
// t คือพารามิเตอร์ที่เข้ามา // r คือพารามิเตอร์การส่งคืน @FunctionAlInterFacePublic ฟังก์ชัน <t, r> {r ใช้ (t t); ค่าเริ่มต้น <v> ฟังก์ชั่น <v, r> pospose (ฟังก์ชัน <? super v,? ขยาย t> ก่อน {objects.requirenonnull (ก่อนหน้า); return (v v) -> ใช้ (ก่อนหน้า (v));} ค่าเริ่มต้น <v> ฟังก์ชั่น <t, v> และ then (ฟังก์ชัน <? super r,? หลังจากใช้งาน (ใช้ (t));มันสามารถเข้าใจได้ว่าเป็นตัวชี้ฟังก์ชั่นในภาษา C (ความคิดเห็นส่วนตัว)
ในการใช้งานจริงวิธีการใช้จะใช้กันอย่างแพร่หลาย การเขียน/และจากนั้นส่วนใหญ่จะใช้ในสถานการณ์ที่มีอินเทอร์เฟซฟังก์ชั่นมากกว่าสองรายการและลำดับการดำเนินการ
ในรหัสธุรกิจเฉพาะฉันมักจะใช้ร่วมกับ bifuncton/ซัพพลายเออร์ Bifunction รองรับพารามิเตอร์ 2 ตัวฟังก์ชั่นรองรับพารามิเตอร์เดียวเท่านั้น ซัพพลายเออร์สามารถใช้เพื่อจัดเก็บค่าที่ต้องการเฉพาะและรับผ่าน Get
ตัวอย่าง
การอ้างอิงถึงรหัสที่คุณมักจะทำงาน ตัวอย่างนี้ส่วนใหญ่จะหลีกเลี่ยงเงื่อนไขการตัดสินหลายประการว่าถ้า/อื่น ๆ ทำให้รหัสถูกป่อง ในเวลาเดียวกันตรรกะทางธุรกิจเดียวกันสามารถถูกแยกออกจากอินเตอร์เฟสฟังก์ชั่นเพื่อให้สามารถนำรหัสกลับมาใช้ใหม่ได้หลายแห่ง รหัสเฉพาะมีดังนี้
ฟังก์ชั่น <วัตถุ, จำนวนเต็ม> actionTest1 = (วัตถุ) -> {// ตรรกะการส่งคืน 0;}; ฟังก์ชั่น <วัตถุ, จำนวนเต็ม> actionTest2 = (วัตถุ) -> {// ลอจิกกลับ 0;}; hashmap <> (); Maps.put (1, ActionTest1); Maps.put (2, ActionTest2); กลับมาแผนที่;}; // ใช้การทดสอบโมฆะสาธารณะ (ประเภท int, วัตถุวัตถุ) {potainal.ofnullable (ActionsUpplier.get (). get (ประเภท)). ifpresent (x -> x.apply (v, object)); // if/else logic ถ้า (type == 1) {// test1 logic} else ถ้า (type == 2) {// test2 logic}}สรุป
โดยส่วนตัวแล้วฉันเชื่อว่าในสถานการณ์ที่มีการตัดสินมากขึ้นในสาขาตรรกะทางธุรกิจมันเหมาะสมกว่าที่จะใช้ฟังก์ชั่นและมีประโยชน์ดังต่อไปนี้
ตัวอย่างอินเตอร์เฟสฟังก์ชัน
อินเทอร์เฟซ Predicate <T> เป็นอินเทอร์เฟซที่ใช้งานได้ซึ่งยอมรับพารามิเตอร์อินพุต T และส่งคืนผลลัพธ์บูลีน
อินเทอร์เฟซนี้มีวิธีการเริ่มต้นที่หลากหลายเพื่อรวมเพรดิเคตเข้ากับ logics ที่ซับซ้อนอื่น ๆ (เช่น: เทียบกับหรือไม่ใช่)
อินเทอร์เฟซนี้ใช้เพื่อทดสอบวัตถุเป็นจริงหรือเท็จ
เราสามารถเข้าใจการใช้งานอินเทอร์เฟซที่ใช้งานได้ <t> ผ่านตัวอย่างต่อไปนี้ (java8tester.java):
java8tester.java นำเข้า java.util.arrays; นำเข้า java.util.list; นำเข้า java.util.function.predicate; คลาสสาธารณะ Java8tester {โมฆะคงที่สาธารณะหลัก (String args []) {รายการ <จำนวนเต็ม> list = array.aslist (1, 2, 3, 4, 5, 6, 7, 8, 9); // Predicate <Integer> predicate = n -> true // n เป็นวิธีการทดสอบที่ส่งผ่านอาร์กิวเมนต์ไปยังอินเตอร์เฟสเพรดิเคต // n หากมีวิธีการทดสอบส่งคืนระบบจริงกลับมาใช้จริง ("ออกข้อมูลทั้งหมด:"); // ผ่านพารามิเตอร์ n eval (รายการ, n-> true); // Predicate <Integer> predict1 = n -> n%2 == 0 // n เป็นวิธีการทดสอบที่ส่งพารามิเตอร์ไปยังอินเตอร์เฟสเพรดิเคต // ถ้า n%2 คือ 0 วิธีการทดสอบส่งคืนระบบจริง. eval (รายการ, n-> n%2 == 0); // Predicate <Integer> predict2 = n -> n> 3 // n เป็นวิธีการทดสอบที่ส่งผ่านพารามิเตอร์ไปยังอินเตอร์เฟสเพรดิเคต // ถ้า n มากกว่า 3 วิธีการทดสอบส่งคืน System.out.out.println ("เอาต์พุตตัวเลขทั้งหมดมากกว่า 3:"); eval (list, n-> n> 3); } โมฆะคงที่สาธารณะ eval (รายการ <teger> รายการ, predicate <integer> ทำนาย) {สำหรับ (จำนวนเต็ม n: รายการ) {ถ้า (predicate.test (n)) {system.out.println (n + ""); -ดำเนินการสคริปต์ด้านบนและผลลัพธ์ผลลัพธ์คือ:
$ javac java8tester.java
$ java java8tester
เอาต์พุตข้อมูลทั้งหมด:
1
2
3
4
5
6
7
8
9
เอาท์พุทตัวเลขทั้งหมด:
2
4
6
8
เอาต์พุตตัวเลขทั้งหมดมากกว่า 3:
4
5
6
7
8
9
สรุป
ด้านบนคืออินเทอร์เฟซฟังก์ชั่นฟังก์ชัน Java 8 และตัวอย่างอินเตอร์เฟสการทำงานที่แนะนำโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!