Lambda式
5941 ワード
きほんけいじょう
(パラメータリスト)->本体
パラメータリスト
パラメータがない場合:() パラメータがの場合:i or(i) 複数のパラメータがの場合:(i,j) パラメータタイプは省略可能であり、コンパイラによって推論/宣言される 本体矢印の右側に関数本文 を定義する多列使用{}バンドル ,{}を減らすと、 を省略できます.
変数取得可変取得ローカル変数の取得 finalまたは有効finalの場合のみ、 を参照してください.そうでないと、同時性の問題が発生する可能性があります.
effective final は実際にfinal変数 に相当する. finalキーワードを使用しない有効なfinal変数は、匿名クラスインプリメンテーションまたはramdaで参照できます.
ビュー(範囲コンセプト) 匿名クラスには新しいscopeがありますが、ランダをめぐるscopeを共有しています.
コード#コード#
(パラメータリスト)->本体
パラメータリスト
パラメータ
変数取得可変取得
private static void run() {
// 사실상 finald인 더이상 변경되지 않는 변수
// effective final 일 경우에만 람다, 로컬클래스, 익명 내부 클래스에서 참조가 가능하다
int basenumber = 10; // 변수
// 로컬 클래스 : 쉐도잉 가능
// 개별 scope를 갖는다
class localClass {
void printBaseNumber() {
int basenumber = 11;
System.out.println(basenumber);
}
}
localClass local = new localClass();
local.printBaseNumber();
// 익명 내부 클래스 : 쉐도잉 가능 (외부 변수를 현재 스코프 내 변수가 덮는다)
// 개별 scope를 갖는다
Consumer<Integer> integerConsumer = new Consumer<Integer>() {
@Override
public void accept(Integer basenumber) {
System.out.println(basenumber);
}
};
integerConsumer.accept(10);
// 람다 : 쉐도잉 불가능 (동일 변수 선언 불가능)
// 현재 람다식이 존재하는 메서드와 scope가 동일하다
IntConsumer printInt = (i) -> {
//int basenumber;
System.out.println(i + basenumber);
};
printInt.accept(10);
}
Reference
この問題について(Lambda式), 我々は、より多くの情報をここで見つけました https://velog.io/@dnstlr2933/Lambda-표현식テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol