logo

Java metodes atsauces

Java nodrošina jaunu līdzekli, ko sauc par metodes atsauci Java 8. Metodes atsauce tiek izmantota, lai atsauktos uz funkcionālās saskarnes metodi. Tas ir kompakts un viegls lambda izteiksmes veids. Katru reizi, kad izmantojat lambda izteiksmi, lai tikai atsauktos uz metodi, varat aizstāt savu lambda izteiksmi ar metodes atsauci. Šajā apmācībā mēs detalizēti izskaidrojam metodes atsauces koncepciju.


Metožu atsauču veidi

Java ir šāda veida atsauces uz metodēm:

  1. Atsauce uz statisku metodi.
  2. Atsauce uz gadījuma metodi.
  3. Atsauce uz konstruktoru.
Java metodes atsauču veidi

1) Atsauce uz statisko metodi

Varat atsaukties uz klasē definēto statisko metodi. Tālāk ir sniegta sintakse un piemērs, kas apraksta statiskās metodes atsauces procesu Java.

Sintakse

 ContainingClass::staticMethodName 

1. piemērs

Nākamajā piemērā mēs esam definējuši funkcionālu saskarni un atsaucoties uz statisko metodi uz tās funkcionālo metodi 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(); } } 
Izmēģiniet to tagad

Izvade:

 Hello, this is static method. 

2. piemērs

Nākamajā piemērā mēs izmantojam iepriekš definētu funkcionālo saskarni Runnable, lai atsauktos uz statisko metodi.

c programmas
 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(); } } 
Izmēģiniet to tagad

Izvade:

 Thread is running... 

3. piemērs

Varat arī izmantot iepriekš definētu funkcionālo interfeisu, lai atsauktos uz metodēm. Nākamajā piemērā mēs izmantojam BiFunction interfeisu un izmantojam tā metodi 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); } } 
Izmēģiniet to tagad

Izvade:

 30 

4. piemērs

Varat arī ignorēt statiskās metodes, izmantojot atsauces metodes. Nākamajā piemērā esam definējuši un pārslogojuši trīs pievienošanas metodes.

 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); } } 
Izmēģiniet to tagad

Izvade:

 30 30.0 30.0 

2) Atsauce uz gadījuma metodi

tāpat kā statiskās metodes, varat atsaukties arī uz gadījumu metodēm. Nākamajā piemērā mēs aprakstām gadījumu metodes atsauces procesu.

Sintakse

 containingObject::instanceMethodName 

1. piemērs

Nākamajā piemērā mēs atsaucamies uz nestatiskām metodēm. Jūs varat atsaukties uz metodēm pēc klases objekta un anonīmā objekta.

 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(); } } 
Izmēģiniet to tagad

Izvade:

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

2. piemērs

Nākamajā piemērā mēs atsaucamies uz instances (nestatisku) metodi. Darbināmā saskarne satur tikai vienu abstraktu metodi. Tātad, mēs varam to izmantot kā funkcionālu interfeisu.

 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(); } } 
Izmēģiniet to tagad

Izvade:

 Hello, this is instance method 

3. piemērs

Nākamajā piemērā mēs izmantojam BiFunction interfeisu. Tas ir iepriekš definēts interfeiss un satur funkcionālu metodi apply (). Šeit mēs atsaucamies uz pievienošanas metodi, lai piemērotu metodi.

 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); } } 
Izmēģiniet to tagad

Izvade:

 30 

3) Atsauce uz konstruktoru

Varat atsaukties uz konstruktoru, izmantojot jauno atslēgvārdu. Šeit mēs atsaucamies uz konstruktoru, izmantojot funkcionālo saskarni.

Sintakse

c++ sadalošā virkne
 ClassName::new 

Piemērs

 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'); } } 
Izmēģiniet to tagad

Izvade:

 Hello