logo

Референце Јава методе

Јава пружа нову функцију која се зове референца методе у Јави 8. Референца методе се користи за упућивање метода функционалног интерфејса. То је компактан и лак облик ламбда израза. Сваки пут када користите ламбда израз само за упућивање на методу, можете да замените свој ламбда израз референцом методе. У овом водичу детаљно објашњавамо концепт референтне методе.


Врсте референци метода

Постоје следеће врсте референци метода у Јави:

  1. Упућивање на статичку методу.
  2. Упућивање на метод инстанце.
  3. Упућивање на конструктор.
Типови референци за Јава методе

1) Упућивање на статичку методу

Можете се позвати на статичку методу дефинисану у класи. Следи синтакса и пример који описују процес упућивања статичког метода у Јави.

Синтакса

 ContainingClass::staticMethodName 

Пример 1

У следећем примеру смо дефинисали функционални интерфејс и упућивали статички метод на његов функционални метод саи().

 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

У следећем примеру користимо унапред дефинисани функционални интерфејс Руннабле за упућивање на статички метод.

 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

Такође можете користити унапред дефинисани функционални интерфејс за упућивање на методе. У следећем примеру користимо БиФунцтион интерфејс и користимо његов метод аппли().

 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(); } } 
Тестирајте одмах

Излаз:

 Hello, this is instance method 

Пример 3

У следећем примеру користимо БиФунцтион интерфејс. То је унапред дефинисан интерфејс и садржи функционалну методу аппли(). Овде се позивамо на метод додавања за примену методе.

упореди у низу
 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