(인자 리스트) -> {바디}
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);
}