logo

הפניות לשיטת Java

Java מספקת תכונה חדשה הנקראת מתודה התייחסות ב-Java 8. הפניה לשיטה משמשת להפניה לשיטת ממשק פונקציונלי. זוהי צורה קומפקטית וקלה של ביטוי למבדה. בכל פעם שאתה משתמש בביטוי למבדה רק להפניה לשיטה, אתה יכול להחליף את ביטוי למבדה שלך בהפניה לשיטה. במדריך זה, אנו מסבירים את מושג ההתייחסות לשיטה בפירוט.


סוגי הפניות לשיטות

ישנם סוגים הבאים של הפניות לשיטה ב-Java:

  1. התייחסות לשיטה סטטית.
  2. התייחסות לשיטת מופע.
  3. התייחסות לבנאי.
סוגי הפניות לשיטת Java

1) התייחסות לשיטה סטטית

אתה יכול להתייחס למתודה סטטית שהוגדרה במחלקה. להלן התחביר והדוגמה המתארים את תהליך הפניה של מתודה סטטית ב-Java.

תחביר

 ContainingClass::staticMethodName 

דוגמה 1

בדוגמה הבאה, הגדרנו ממשק פונקציונלי והפנינו שיטה סטטית לשיטה הפונקציונלית שלה say().

 interface Sayable{ void say(); } public class MethodReference { public static void saySomething(){ System.out.println('Hello, this is static method.'); } public static void main(String[] args) { // Referring static method Sayable sayable = MethodReference::saySomething; // Calling interface method sayable.say(); } } 
בדוק את זה עכשיו

תְפוּקָה:

 Hello, this is static method. 

דוגמה 2

בדוגמה הבאה, אנו משתמשים בממשק פונקציונלי מוגדר מראש בשיטת Runnable to refer static.

 public class MethodReference2 { public static void ThreadStatus(){ System.out.println('Thread is running...'); } public static void main(String[] args) { Thread t2=new Thread(MethodReference2::ThreadStatus); t2.start(); } } 
בדוק את זה עכשיו

תְפוּקָה:

 Thread is running... 

דוגמה 3

אתה יכול גם להשתמש בממשק פונקציונלי מוגדר מראש כדי להפנות שיטות. בדוגמה הבאה, אנו משתמשים בממשק BiFunction ומשתמשים בשיטת ה-apply() של זה.

 import java.util.function.BiFunction; class Arithmetic{ public static int add(int a, int b){ return a+b; } } public class MethodReference3 { public static void main(String[] args) { BiFunctionadder = Arithmetic::add; int result = adder.apply(10, 20); System.out.println(result); } } 
בדוק את זה עכשיו

תְפוּקָה:

 30 

דוגמה 4

אתה יכול גם לעקוף שיטות סטטיות על ידי הפניית שיטות. בדוגמה הבאה, הגדרנו והעמסנו שלוש שיטות הוספה.

 import java.util.function.BiFunction; class Arithmetic{ public static int add(int a, int b){ return a+b; } public static float add(int a, float b){ return a+b; } public static float add(float a, float b){ return a+b; } } public class MethodReference4 { public static void main(String[] args) { BiFunctionadder1 = Arithmetic::add; BiFunctionadder2 = Arithmetic::add; BiFunctionadder3 = Arithmetic::add; int result1 = adder1.apply(10, 20); float result2 = adder2.apply(10, 20.0f); float result3 = adder3.apply(10.0f, 20.0f); System.out.println(result1); System.out.println(result2); System.out.println(result3); } } 
בדוק את זה עכשיו

תְפוּקָה:

 30 30.0 30.0 

2) התייחסות לשיטת מופע

כמו שיטות סטטיות, אתה יכול להפנות גם לשיטות מופע. בדוגמה הבאה, אנו מתארים את תהליך ההפניה לשיטת המופע.

תחביר

 containingObject::instanceMethodName 

דוגמה 1

בדוגמה הבאה, אנו מתייחסים לשיטות לא סטטיות. אתה יכול להפנות שיטות לפי אובייקט מחלקה ואובייקט אנונימי.

 interface Sayable{ void say(); } public class InstanceMethodReference { public void saySomething(){ System.out.println('Hello, this is non-static method.'); } public static void main(String[] args) { InstanceMethodReference methodReference = new InstanceMethodReference(); // Creating object // Referring non-static method using reference Sayable sayable = methodReference::saySomething; // Calling interface method sayable.say(); // Referring non-static method using anonymous object Sayable sayable2 = new InstanceMethodReference()::saySomething; // You can use anonymous object also // Calling interface method sayable2.say(); } } 
בדוק את זה עכשיו

תְפוּקָה:

 Hello, this is non-static method. Hello, this is non-static method. 

דוגמה 2

בדוגמה הבאה, אנו מתייחסים לשיטת מופע (לא סטטי). ממשק הניתן להפעלה מכיל רק שיטה מופשטת אחת. אז, אנחנו יכולים להשתמש בו כממשק פונקציונלי.

 public class InstanceMethodReference2 { public void printnMsg(){ System.out.println('Hello, this is instance method'); } public static void main(String[] args) { Thread t2=new Thread(new InstanceMethodReference2()::printnMsg); t2.start(); } } 
בדוק את זה עכשיו

תְפוּקָה:

תוכניות c
 Hello, this is instance method 

דוגמה 3

בדוגמה הבאה, אנו משתמשים בממשק BiFunction. זהו ממשק מוגדר מראש ומכיל שיטה פונקציונלית apply(). כאן אנו מתייחסים לשיטת הוספה לשיטת יישום.

 import java.util.function.BiFunction; class Arithmetic{ public int add(int a, int b){ return a+b; } } public class InstanceMethodReference3 { public static void main(String[] args) { BiFunctionadder = new Arithmetic()::add; int result = adder.apply(10, 20); System.out.println(result); } } 
בדוק את זה עכשיו

תְפוּקָה:

 30 

3) הפניה לבנאי

אתה יכול להפנות בנאי באמצעות מילת המפתח החדשה. כאן, אנו מתייחסים לבנאי בעזרת ממשק פונקציונלי.

תחביר

 ClassName::new 

דוגמא

 interface Messageable{ Message getMessage(String msg); } class Message{ Message(String msg){ System.out.print(msg); } } public class ConstructorReference { public static void main(String[] args) { Messageable hello = Message::new; hello.getMessage('Hello'); } } 
בדוק את זה עכשיו

תְפוּקָה:

 Hello