1.ラムダ式の本質
ラムダ式と匿名の内部クラスは、実際にはインターフェースのインスタンスを生成するために使用されます。
クラスを介してインターフェイスを実装し、クラスによってオブジェクトをインスタンス化する場合と比較して、ラムダ式と匿名の内部クラス構文はより簡潔であり、クラスを定義せずにインターフェイスのインスタンスを生成できます。
2.文法
たとえば、暗号化インターフェースは次のとおりです。
/**
* 加密接口
*/
public interface IEncoder {
/**
* 对数字加密
*/
public int encode(int num);
}
2.1クラスによる暗号化
特定の暗号化アルゴリズムを実装する最も一般的な方法は、インターフェースを実装するクラスを定義することです次のコードは、純粋に通常の操作であり、説明する必要はありません。
/**
* 加法加密
*/
public class AddEncoder implements IEncoder {
@Override
public int encode(int num) {
return num + 1;
}
/**
* 测试
*/
public static void main(String[] args) {
IEncoder encoder = new AddEncoder();
int result = encoder.encode(1);
System.out.println("加密结果:" + result);
}
}
2.2匿名の内部クラスによる暗号化
匿名の内部クラスを使用する場合、クラスを具体的に定義する必要はなく、必要に応じて匿名の内部クラスを定義するだけです。
public class AnonymousDemo {
public static void main(String[] args) {
// 使用时临时定义类
IEncoder encoder = new IEncoder() {
@Override
public int encode(int num) {
return num + 1;
}
};
int result = encoder.encode(1);
System.out.println("加密结果:" + result);
}
}
上記の2つの例のエンコーダーオブジェクトの場合、それらの機能は実際には同じであり、両方とも追加の暗号化メソッドを使用するインスタンスです。ただし、このオブジェクトを生成する特定のメソッドに関しては、匿名の内部クラスを一時的に使用して、クラスを具体的に定義するよりも軽量な暗号化メソッドをカスタマイズできます。
2.3 Lambda式による暗号化
ラムダ式の方が単純ですが、基本的にはインターフェースインスタンスを生成します。
public class LambdaDemo {
public static void main(String[] args) {
// 通过表达式定义接口的实力
IEncoder encoder = (num) -> {
return num + 1;
};
int result = encoder.encode(1);
System.out.println("加密结果:" + result);
}
}
ご覧のとおり、実際には、ラムダ式はまだメソッドの具体的な実現を示しています。
(num)
パラメータを表します->
これがラムダ式であることを示します{return num+1;}
コードブロック、特定のメソッドロジックを記述します。
2.4ラムダ式の省略形
パラメーターリストにパラメーターが1つしかない場合は、パラメーターの括弧を省略できます。
コードブロックにステートメントが1つしかない場合は、コードブロックを直接省略できます{}
。
コードブロックが1つしかない場合はreturn
、省略することもできます。
したがって、上記の式は次のように簡略化できます。
public class LambdaDemo {
public static void main(String[] args) {
// 通过表达式定义接口的实力
IEncoder encoder = num -> num + 1;
int result = encoder.encode(1);
System.out.println("加密结果:" + result);
}
}
3.ラムダ式の意味
匿名の内部クラスとラムダ式は、インターフェースのインスタンス化のコードを単純化するためのものです。
インターフェイスのインスタンスが1回しか使用されない場合、クラスだけを記述するのは少し無駄です。式で直接実行することをお勧めします。
ラムダは匿名の内部クラスよりも単純ですが、ラムダ式は1つのメソッドのみを持つインターフェースに直面できますが、匿名関数は任意の数のメソッドを持つインターフェースをサポートできます。
4.機能インターフェース
ラムダ式は、関数型インターフェイスと呼ばれるメソッドインターフェイスを1つだけサポートできます。
Java8は、@FunctionalInterface
インターフェースが機能しているかどうかを確認するための機能インターフェースの注釈を提供します。これは、機能インターフェースの重要性を示しています!
構文は次のとおりです。
/**
* 加密接口
*/
@FunctionalInterface
public interface IEncoder {
/**
* 对数字加密
*/
public int encode(int num);
}