티스토리 뷰
반응형
public class CloserTest {
public static void main(String[] args) {
int number = 10;
Consumer<Integer> consumer = new Consumer<>() {
@Override
public void accept(Integer integer) {
// Variable used in lambda expression should be final or effectively final
number = 10;
System.out.println(number);
}
};
Consumer<Integer> consumer2 = integer -> {
// Variable used in lambda expression should be final or effectively final
number = 10;
System.out.println(number);
};
}
}
위의 코드에서 number 변수는 main() 메소드의 지역 변수로 스택 메모리에 저장됩니다.
그리고 익명 클래스에서 number 변수를 사용하려고 하고 있습니다.
이 때, 익명 클래스는 consumer 변수에 저장되므로 힙 메모리에 저장됩니다.
자바에서는 익명 클래스에서 외부 변수를 참조할 경우, 해당 변수가 final 또는 effectively final 상태여야 합니다.
이는 스택 메모리에 있는 변수가 변경되면 그에 따라 힙 메모리에 있는 익명 클래스의 변수도 변경되어야 하는데, 이러한 상황을 방지하기 위함입니다.
따라서, 위의 코드에서 number 변수를 final 또는 effectively final로 선언하거나, 익명 클래스에서 number 변수를 변경하지 않도록 수정해야 합니다.
public class CloserTest {
public static void main(String[] args) {
int number = 10;
Consumer<Integer> consumer = new Consumer<>() {
@Override
public void accept(Integer integer) {
int number = 10; // 가능
System.out.println(number);
}
};
Consumer<Integer> consumer2 = integer -> {
int number = 10; // 불가능
System.out.println(number);
};
}
}
또한 Consumer의 경우 int number로 외부에 있는 변수명을 사용하는것이 가능하지만,
람다의 경우 외부와 같은 Scope로 인식하기에 불가능합니다.
반응형
'java_basic' 카테고리의 다른 글
Build 패턴 NullPointException, ArrayList (0) | 2023.06.10 |
---|---|
파일다운로드 (0) | 2022.11.17 |
Lambda 기초5 최종연산 reduce (0) | 2022.02.16 |
Lambda 기초4 중간연산2 (0) | 2022.02.16 |
Lambda 기초4 중간연산1 (2) | 2022.02.14 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Intellij
- 중간연산
- 자바8
- webpack
- stream
- 최종연산
- Vue
- NPM
- BeanFactory
- JPA
- docker
- nginx
- 스트림
- 영속성 컨텍스트
- 차이
- vscode
- ApplicationContext
- ngnix
- lambda
- springboot
- Vuex
- container
- java
- MAC
- install
- 람다
- mvn
- map
- AnnotationConfigApplicationContext
- elasticsearch
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함