logo

Reference metody Java

Java poskytuje novou funkci nazvanou odkaz na metodu v jazyce Java 8. Odkaz na metodu se používá k odkazování na metodu funkčního rozhraní. Jedná se o kompaktní a snadnou formu lambda výrazu. Pokaždé, když používáte výraz lambda pouze k odkazování na metodu, můžete svůj výraz lambda nahradit odkazem na metodu. V tomto tutoriálu podrobně vysvětlujeme koncept referenční metody.


Typy referencí metod

V jazyce Java existují následující typy odkazů na metody:

  1. Odkaz na statickou metodu.
  2. Odkaz na metodu instance.
  3. Odkaz na konstruktéra.
Typy odkazů na metody Java

1) Odkaz na statickou metodu

Můžete odkazovat na statickou metodu definovanou ve třídě. Následuje syntaxe a příklad, které popisují proces odkazování statické metody v Javě.

převést řetězec na char

Syntax

 ContainingClass::staticMethodName 

Příklad 1

V následujícím příkladu jsme definovali funkční rozhraní a odkázali statickou metodu na její funkční metodu 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(); } } 
Otestujte to hned

Výstup:

 Hello, this is static method. 

Příklad 2

V následujícím příkladu používáme k odkazování statické metody předdefinované funkční rozhraní Runnable.

 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(); } } 
Otestujte to hned

Výstup:

 Thread is running... 

Příklad 3

K odkazování metod můžete také použít předdefinované funkční rozhraní. V následujícím příkladu používáme rozhraní BiFunction a jeho metodu 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); } } 
Otestujte to hned

Výstup:

 30 

Příklad 4

Můžete také přepsat statické metody odkazováním na metody. V následujícím příkladu jsme definovali a přetížili tři metody přidání.

 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); } } 
Otestujte to hned

Výstup:

 30 30.0 30.0 

2) Odkaz na metodu instance

jako statické metody můžete také odkazovat na metody instance. V následujícím příkladu popisujeme proces odkazování na metodu instance.

Syntax

 containingObject::instanceMethodName 

Příklad 1

V následujícím příkladu odkazujeme na nestatické metody. Metody můžete odkazovat podle objektu třídy a anonymního objektu.

 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(); } } 
Otestujte to hned

Výstup:

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

Příklad 2

V následujícím příkladu odkazujeme na instanční (nestatickou) metodu. Spustitelné rozhraní obsahuje pouze jednu abstraktní metodu. Můžeme jej tedy použít jako funkční rozhraní.

 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(); } } 
Otestujte to hned

Výstup:

 Hello, this is instance method 

Příklad 3

V následujícím příkladu používáme rozhraní BiFunction. Je to předdefinované rozhraní a obsahuje funkční metodu apply(). Zde odkazujeme na metodu přidání k aplikaci metody.

 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); } } 
Otestujte to hned

Výstup:

 30 

3) Odkaz na konstruktéra

Konstruktor můžete odkázat pomocí klíčového slova new. Zde odkazujeme konstruktor pomocí funkčního rozhraní.

Syntax

 ClassName::new 

Příklad

 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'); } } 
Otestujte to hned

Výstup:

 Hello