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:
- Atsauce uz statisku metodi.
- Atsauce uz gadījuma metodi.
- Atsauce uz konstruktoru.
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