Java での閉鎖
変数の値をインクリメントするラムダ式を定義すると、エラーがスローされます。
ただし、この問題には簡単な解決策があります。 Closures
を使用することで、このエラーを防ぐことができます。
Closures
はインライン関数であり、値付きの式を持ちます。つまり、境界変数を持つクラスの関数です。 Closures のもう 1つのエキサイティングな機能は、別の関数にパラメーターとして渡すことができることです。
この記事では、クロージャ
について詳しく説明し、トピックを簡単にするために必要な例と説明を提供します。
議論に入る前に、以下のような閉鎖の一般的な構文を見てみましょう。
(List_of_Arguments) -> {
Function_Body
}
Java での閉鎖
以下の例では、Closures
を使用して 2つの文字列を結合する最も基本的な Closures
を示します。 以下のコードを見てみましょう。
package javacodes;
// Importing necessary packages
import java.io.*;
interface CombineString { // Defining a interface
public String concat(String a, String b);
}
// The controlling class
public class JavaClosures {
public static void main(String[] args) {
// Using the "Lambda Expression"
CombineString cs = (str1, str2) -> str1 + str2;
System.out.println("The combined string is: " + cs.concat("Alen", " Walker"));
}
}
各行の目的についてはすでにコメントしました。 上記の例では、最初に CombineString
という名前のインターフェイスを concat
という名前の抽象メソッドで定義しました。
制御クラスでは、抽象メソッドを定義する Closure
を作成しました。
上記の例を実行すると、次のような出力が得られます。
The combined string is: Alen Walker
Java でのクロージャのネストされた使用
トピックをもう少し深く掘り下げてみましょう。 以下の例を見てください。ここでは、2つの Closures
の間にネストされた呼び出しを作成しています。
interface PrintData { // An interface to print data
public void Print(int data); // An abstract method to print data
}
interface NumberAdd { // An interface to add two numbers
public void add(int a, int b); // An abstract method to add two numbers
}
// Main controlling class
public class JavaClosures {
public static void main(String[] args) {
// Using the "Lambda Expression"
PrintData printdata = (str) -> {
System.out.println("The combined string is: " + str);
};
NumberAdd addnum = (x, y) -> {
printdata.Print(x + y); // The nested call
};
addnum.add(5, 5); // Calling the add method
}
}
各行の目的についてはすでにコメントしました。 上記の例では、最初にインターフェイス PrintData
と NumberAdd
を作成しました。
インターフェース PrintData
には抽象メソッド Print
が含まれており、インターフェース NumberAdd
には抽象メソッド add
が含まれています。
制御クラスでは、最初に抽象メソッド Print
を定義しました。これは、このメソッドを厄介に呼び出すためです。
次に、抽象メソッド add
を定義します。このメソッドの定義を見ると、メソッド Print
を呼び出していることがわかります。
上記の例を実行すると、以下のような出力が得られます。
The combined string is: 10
ここで共有されているコード例は Java であり、システムに Java が含まれていない場合は、環境に Java をインストールする必要があることに注意してください。
Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.
LinkedIn