ホームページ  >  記事  >  Java  >  Java メソッドのリファレンス

Java メソッドのリファレンス

王林
王林オリジナル
2024-08-30 15:09:10430ブラウズ

次の記事では、Java メソッド リファレンスの概要を説明します。 JDK 8 では、1 つの操作を実行するための匿名メソッドを 1 行で作成するラムダ式が導入されました。ただし、既存のメソッドが呼び出されるときにラムダ式を記述する場合、そのような操作はメソッド参照を使用して可能になります。これにより、既存のメソッドへの呼び出しが存在する場合、式がよりコンパクトで読みやすくなります。さらに、メソッド参照スコープでは、メソッド名とクラス名を分離するために解決演算子(::)が使用されます。

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

Java メソッド参照の種類

メソッド References の必要性を例を挙げて見てみましょう:

コード:

public class Employee {
public enum Sex {
MALE, FEMALE
}
String name;
LocalDatejoiningDate;
Sex gender;
String emailAddress;
public int getNumberOfYears() {
}
public Calendar getJoiningDate() {
return joiningDate;
}
public static int compareByJoiningDate(Employeea, Employeeb) {
return a.joiningDate.compareTo(b.joiningDate);
}}

そして、joiningDate で誰が最初に参加するかを基準にして従業員のリストを並べ替えたい場合は、サブクラスの 1 つで以下のメソッドを呼び出すことができます。

コード:

Person[] rosterAsArray = roster.toArray(new Employee[roster.size()]);
class JoiningDateComparator implements Comparator<Employee> {
public int compare(Employeea, Employeeb) {
return a.getJoiningDate().compareTo(b.getJoiningDate());
}
}

したがって、リストを並べ替えながら 2 人の従業員の入社日を比較する際に、上記のメソッドを呼び出すラムダ式を作成できます。

コード:

Arrays.sort(rosterAsArray,
(a, b) ->Person.compareByAge(a, b)
);

または、以下の方法でメソッドを呼び出すこともできます。どちらも、配列内のオブジェクトの各ペアのメソッドを呼び出すという同じ意味を持ちます。

コード:

Arrays.sort(rosterAsArray, Person::compareByAge)

JDk 8 には次の 4 種類のメソッド参照が存在します。

1.静的メソッドへの参照

:: 演算子を使用した静的メソッドへの参照は、静的メソッドへの参照として知られています。

構文:

ClassName::MethodName()

作業中:

  • ここで参照されているメソッドは静的型です。つまり、このメソッドを呼び出すためにクラスのインスタンスは必要ありません。代わりに、クラス名のみで十分です。
  • したがって、ラムダ式で ClassName::MethodName に言及すると、JRE はそのクラスにアクセスして、言及されたクラス内の静的メソッドを見つけます。これは静的メソッドの呼び出しであるため、非静的ブロックの下で言及することはできません。

例:

以下の例では、Addition クラスの静的メソッド add が、java.util パッケージの bifunction クラスの機能を使用して呼び出されます。このメソッドの参照は myObj オブジェクトに格納され、必要な値とともに渡されます。引数として渡されます。

コード:

import java.util.function.BiFunction;
class Addition{
public static int add(int a, int b){
return a+b;
}
}
public class HelloWorld {
public static void main(String[] args) {
BiFunction<Integer, Integer, Integer>myObj = Addition::add;
int res = myObj.apply(30, 5);
System.out.println("Sum of given number is: "+res);
}
}

出力:

Java メソッドのリファレンス

2.特定のオブジェクトのインスタンス メソッドへの参照

構文:

object::methodName()

作業中:

  • このタイプの参照では、クラスのオブジェクトを使用して、そのインスタンス メソッドの 1 つを参照します。ここで JRE は、渡された引数がメソッド宣言で述べられているのと同じ型であるかどうかをチェックします。
  • これは、クラスのインスタンス メソッドを使用してラムダ式を作成するのに役立ちます。

例:

以下の例では、クラス HelloWorld の showName メソッドが、インスタンス メソッドへのメソッド参照を使用して呼び出されます。

コード:

interface MyInterface{
void display();
}
public class HelloWorld {
public void showName(){
System.out.println("Call to method ShowName");
}
public static void main(String[] args) {
HelloWorld obj = new HelloWorld();
MyInterface ref = obj::showName;
ref.display();
}
}

出力:

Java メソッドのリファレンス

3.特定の型の任意のオブジェクトのインスタンス メソッドへの参照

構文:

ClassName :: instanceMethodName()

作業中:

  • これは上記と同じタイプの参照ですが、ここで参照されているオブジェクトが継続的に変化している点が異なります。つまり、多くのオブジェクトがメソッド参照を使用して同じタイプの同じメソッドを呼び出しています。

例: 以下の例では、配列に格納されているすべての文字列に対して CompareToIgnoreCase メソッドを呼び出しています。したがって、異なるオブジェクトを 1 つずつ渡す代わりに、名簿を使用して 1 つのステートメントでこれが行われます。

コード:

import java.util.Arrays;
public class HelloWorld {
public static void main(String[] args) {
String[] empArray = { "John", "Jack", "Aditya", "Vishal", "Saurabh", "Amanda", "Daniel"};
Arrays.sort(empArray, String::compareToIgnoreCase);
System.out.println("Sorted list of names of Employees \n");
for(String str: empArray){
System.out.println(str);
}
}
}

出力:

Java メソッドのリファレンス

4.コンストラクターへの参照

構文:

myFunc(roster, HashSet<MyClass>::new);

作業中:

  • この参照呼び出しは、クラスのコンストラクターを呼び出すためにも行われます。
  • このため、ラムダ式で「new」キーワードが使用されており、JRE はその特定のクラスのコンストラクターを呼び出すように推論されます。

以下のメソッドの呼び出しを含み、HashSet の新しいコンストラクターを渡す必要があるラムダ式の例を見てみましょう。

コード:

publicstatic<T, MYSRCextends Collection<T>, MYDESTextends Collection<T>>
MYDEST MyMethod(
MYSRC src,
Supplier< MYDEST>dest) {
MYDEST res = collectionFactory.get();
for (T t : src)
{res.add(t);
}
returnres;
}

ラムダ式は次のようになります:

コード:

Set<myClass>rosterSet = MyMethod(roster, HashSet::new);

ここで、JRE は渡された引数に myClass タイプのオブジェクトが含まれているか、または以下のラムダ式を使用して次のいずれかを行うことができると自動的に推測します

Set<myClass>rosterSet = transferElements(roster, HashSet<myClass>::new);

Example: In the below example, a constructor of a firstReference class is being called using ‘new’ operator and stored in a reference variable ‘inObj’. This reference variable is then used to refer to the instance methods of this class.

Code:

@FunctionalInterface
interface firstInterface{
firstReference show(String say);
}
class firstReference{
public firstReference(String say){
System.out.print(say);
}
}
public class HelloWorld {
public static void main(String[] args) {
//Method reference to a constructor
firstInterface inObj = firstReference::new;
inObj.show("Let’s begin learning Contructor type method reference");
}
}

Output:

Java メソッドのリファレンス

Conclusion

Method Reference is a way to make a call to an existing method in lambda expressions being used in the application. This feature has been introduced with JDK 1.8 to make lambda expressions more compact and reuse the existing code. There are four ways to make calls to the methods of the class names as shown above.

以上がJava メソッドのリファレンスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:Java での開梱次の記事:Java での開梱