Study_The JAVA 8_3
Java基礎学習22.01.26(カウント)
ランダ式
(パラメータリスト)->本体からなる. 本体は1行であり、上記1行を省略することができる.
- 📖 パラメータ・リストのタイプ
-パラメータがない場合:()->{body}//パラメータを受け入れないSupplier関数インタフェースが典型的な例です.
-パラメータが1つしかない場合:(i)or i
-パラメータが複数の場合:(i,j)
−∧¥因子のタイプは、コンパイラによって推定されてもよいし、省略されてもよいので、選択によって明確または省略されてもよい.
ランダボディでは、パラメータに加えて、ボディ以外の変数も参照できます.
この挙動をLamdaキャプチャまたはローカル変数キャプチャと呼ぶ. をキャプチャするために、上記の例の
effect final(事実上不変、final特性を有する変数)の場合にのみ可能である. Java 8までは常にfinalが必要です.有効finalは、匿名クラスインプリメンテーションまたはramdaにおいて参照可能な共通点を有する.
匿名クラス実装体とは異なり、ランダには関数の外を指す関数が隠されています. ローカルクラス、匿名クラス、RamdaクラスのScopeによって、Shadowingの範囲が異なります. の上の例により、図に示すように、各レベルのシャドウが図で表される.
図に示すように、ローカルクラスと匿名クラスはそのスキャン範囲内にある.
変数名と同じ変数名に再定義すると、
変数は、外部参照の変数名を隠します. 実際には、ラムダのスキャン範囲は外部方法の範囲と同じであるため、2つの同じ変数名を使用することはできない.
どうしたんですか.違う
匿名類は匿名の「対象」と見なすことができるが、これはラムダが対象ではないためだ.
すなわち,匿名クラスでは自分を指し,ラムダでは自分を宣伝するクラスを指す.
ランダ式
Ramda式の設定
public class Foo {
public static void main(String[] args) {
UnaryOperator<Integer> plus10 = (i) -> i + 10; // 인자(i) -> 바디(i+10)
System.out.println(plus10.apply(1)); // 11 출력
}
}
public class Foo {
public static void main(String[] args) {
UnaryOperator<Integer> plus10 = (i) -> i + 10; // 인자(i) -> 바디(i+10)
System.out.println(plus10.apply(1)); // 11 출력
}
}
- 📖 パラメータ・リストのタイプ
-パラメータがない場合:()->{body}//パラメータを受け入れないSupplier関数インタフェースが典型的な例です.
-パラメータが1つしかない場合:(i)or i
-パラメータが複数の場合:(i,j)
−∧¥因子のタイプは、コンパイラによって推定されてもよいし、省略されてもよいので、選択によって明確または省略されてもよい.
変数のスナップ
ローカル変数の取得
import java.util.function.*;
public class Foo {
public static void main(String[] args) {
Foo foo = new Foo();
foo.run();
}
private void run() {
int baseNumber = 10; // 사실상 Final인 변수(effective final)
IntConsumer printInt = (i) -> {
System.out.println(i + baseNumber);
};
printInt.accept(10);
}
}
この挙動をLamdaキャプチャまたはローカル変数キャプチャと呼ぶ.
baseNumber
はFinalとして指定される.effect final(事実上不変、final特性を有する変数)の場合にのみ可能である.
匿名クラス実装体とは異なり、ランダには
쉐도잉
はない.の手入れを
import java.util.function.*;
public class Foo {
public static void main(String[] args) {
Foo foo = new Foo();
foo.run();
}
private void run() {
int baseNumber = 10; // 사실상 Final인 변수(effective final)
//로컬 클래스
Class LocalClass {
void printBaseNumber() {
System.out.println(baseNumber);
}
}
//익명 클래스
Consumer<Integer> integerConsumer = new Consumer() {
@Override
public void accpet(Integer integer) {
System.out.println(baseNumber);
}
};
//람다
IntConsumer printInt = (i) -> {
System.out.println(i + baseNumber);
};
printInt.accept(10);
}
}
ローカルクラス、匿名クラス
import java.util.function.*;
public class Foo {
public static void main(String[] args) {
Foo foo = new Foo();
foo.run();
}
private void run() {
int baseNumber = 10; // 사실상 Final인 변수(effective final)
//로컬클래스
Class LocalClass { // 로컬클래스의 Scope 범위 시작
void printBaseNumber() {
int baseNumber = 11; //참조하고있는 외부 변수와 동일한 변수명을 스코프 내에서 재정의
System.out.println(baseNumber); // 10이 아닌 11이 출력된다.
}
} // 로컬클래스의 Scope 범위 끝
//익명클래스
Consumer<Integer> integerConsumer = new Consumer() { // 익명클래스의 Scope 범위 시작
@Override
public void accpet(Integer baseNumber) { // 파라미터 이름을 참조하고 있는 외부 변수와 동일한 이름으로 변경
System.out.println(baseNumber);
}
}; // 익명클래스의 Scope 범위 끝
printInt.accept(10);
}
}
変数名と同じ変数名に再定義すると、
変数は、外部参照の変数名を隠します.
ブルーダ
import java.util.function.*;
public class Foo {
public static void main(String[] args) {
Foo foo = new Foo();
foo.run();
}
private void run() { // 람다의 Scope 범위 시작
int baseNumber = 10; // 사실상 Final인 변수(effective final)
//람다
IntConsumer printInt = (baseNumber) -> { // 같은 변수명을 사용할 경우 컴파일 에러가 난다.
System.out.println(baseNumber);
};
printInt.accept(10);
} // 람다의 Scope 범위 끝
}
どうしたんですか.違う
匿名類は匿名の「対象」と見なすことができるが、これはラムダが対象ではないためだ.
すなわち,匿名クラスでは自分を指し,ラムダでは自分を宣伝するクラスを指す.
Reference
この問題について(Study_The JAVA 8_3), 我々は、より多くの情報をここで見つけました https://velog.io/@dragon9265/StudyThe-JAVA-83テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol