記事のディレクトリ
1、ラムダプロフィール
ラムダ式は、Java 8つの最も人気があり、一般的に使用される機能です。
これは、関数型プログラミングの利点は、それが私たちは非常に使いやすい、コードの多くを救うことができるということです、非常に私たちの符号化効率を向上させることができ、関数型プログラミングのJavaの概念を紹介します。
2.お知らせ
2.1インタフェース - >デフォルトの方法
キーワードのデフォルトは、メソッドがメソッド本体を必要と修正されました。
あなたが上書きしたい場合には、このようなアプローチは、すべてのサブクラスのデフォルト実装では、(記述する必要はありません)、実装クラスで上書きすることができます。
デフォルトのキーワードの役割を拡張するために使用されます。
/**
* 从java8开始,接口当中允许定义default默认方法
* 修饰符:public default(public可以省略,default不能省略)
*/
public interface MyInterface {
void method1();
void method2();
// 接口中的一个默认方法
default void methodNew() {
System.out.println("接口默认方法执行");
}
}
2.2インターフェース - >静的メソッド
デフォルト(デフォルトメソッド)、すべてのサブクラスが実装をデフォルト設定されます。
しかし、インタフェースの実装クラスの静的メソッドは継承されない(達成します)。
/**
* 从java8开始,接口当中允许定义静态方法
* 修饰符:static xxx
* 一般类的静态方法用法相同
*/
public interface Animal {
void eat();
// 接口中的一个静态方法
static Animal getAnimal() {
return new Cat();
}
}
2.3関数インタフェース
Javaの手段で関数インタフェース、:1と抽象インタフェースの1つの方法だけ。
機能インターフェース、関数型プログラミングシナリオに適しているインターフェース。
機能インタフェースを使用して、インターフェイスラムダ使用に適用できるということであるので、Javaで関数型プログラミングは、ラムダを反映しています。
関数型プログラミングの利点は、それは、非常に使いやすい、コードの多くを救う大幅に私たちの符号化効率を向上させることができます私たちを助けることができるということです。
唯一のインターフェイスとだけ1つの抽象メソッドを確保することで、Javaがスムーズラムダに推定することができます。
2.3.1機能アノテーションインタフェースフォーマット@FunctionalInterface
フォーマット:
つまりインタフェース、およびへの抽象インタフェースの唯一の方法。
たとえば、スレッドのrun()メソッド。
Public interface 接口名称 {
返回值 方法名称();
}
@FunctionalInterfaceノート
といくつかのアノテーションは、このような@Overrideのコメントとして、作業の集大成です。
ノート@FunctionalInterface、また、コンパイル時に動作します。
注釈は、インターフェースに作用する、新しい注釈java8インタフェース機能が導入されるために特別です。
条件は、機能インタフェースとインタフェース準拠を強制するかどうかをチェックする、インターフェイスを定義するために、コンパイル時に、このアノテーションを使用することにより、エラーう満たしていません。
注:
注釈が使用されていない場合でも、限り関数インタフェースで定義関数インタフェース、など。
3、ラムダ式
3.1、ラムダ式のフォーマット
フォーマット:
同様の機能ES6矢印。
(param1,param2,param3 ...,paramN)- > {
//代码块;
}
注意:
- ラムダ式は、関数表現のインタフェースです。
- 左側の矢印、カンマ区切りの関数であるパラメータの形式リストは、
- 右側の矢印は、関数本体です。
原理は3.2、ラムダ式を省略しました
図1に示すように、パラメータタイプは省略してもよいです。
しかし、全てのパラメータの唯一のタイプを省略し、あるいは単に省略することがありません。
図2に示すように、パラメータリストのパラメータ、及び唯一の場合は、括弧を省略することができます。
図3に示すように、中括弧内のステートメント、および唯一の場合、そして、存在するか否かを戻り値、リターン、ブレースは、セミコロンを省略することができます
3.3、元の言葉遣い
package com.zicheng.lambda;
/**
* 子诚
* Description:原始写法
* 时间:2020/3/30 9:38
*/
public class LambdaDemo {
//抽象功能接口
interface Printer {
void print(String val);
}
//通过参数传递功能接口
public void printSomething(String something, Printer printer) {
printer.print(something);
}
//通过创建对象调用函数
public static void main(String[] args) {
LambdaDemo demo = new LambdaDemo();
String something = "I am learning Lambda";
//实现Printer接口,内部类的方式
Printer printer = new Printer() {
@Override
public void print(String val) {
//控制台打印
System.out.println(val);
}
};
//调用接口打印
demo.printSomething(something, printer);
}
}
3.4、ラムダ式の言葉遣い
package com.zicheng.lambda;
/**
* 子诚
* Description:
* 时间:2020/3/30 10:27
*/
public class LambdaDemo2 {
//抽象功能接口
interface Printer {
void print(String val);
}
//通过参数传递功能接口
public void printSomething(String something, Printer printer) {
printer.print(something);
}
//通过创建对象调用函数
public static void main(String[] args) {
LambdaDemo2 demo2 = new LambdaDemo2();
String something = "I am learning Lambda";
//实现Printer接口,内部类的方式
Printer printer = (String val) -> {
//控制台打印
System.out.println(val);
};
//调用接口打印
demo2.printSomething(something, printer);
}
}
ラムダ式の3.5、3.4、および最適化
3.4コード
//实现Printer接口,内部类的方式
Printer printer = (String val) -> {
//控制台打印
System.out.println(val);
};
3.5.1 Typeパラメータが省略されているが、唯一つのパラメータから、括弧を省略することが
//实现Printer接口,内部类的方式
Printer printer = val -> {
//控制台打印
System.out.println(val);
};
3.5.2メソッド本体以来、唯一の文は、中括弧は省略されています
//实现Printer接口,内部类的方式
Printer printer = val -> System.out.println(val);