Local variable counter defined in an enclosing scope must be final or effectively final.
@Test
public void counterTest() {
int count = 0;
IntStream.range(0, 10)
.forEach(i -> {
count++; // Local variable count defined in an enclosing scope must be final or effectively final
});
System.out.println(count);
}
[증상]
익명함수에서 로컬변수를 수정할 수 없는 현상.
[해결방법]
1. 로컬변수를 클래스 멤버로 변경한다.
int count;
@Test
public void counterTest() {
count = 0;
IntStream.range(0, 10)
.forEach(i -> {
count++; // OK
});
System.out.println(count);
}
2. AtomicInteger 를 사용한다.
@Test
public void counterTest() {
AtomicInteger count = new AtomicInteger(0);
IntStream.range(0, 10)
.forEach(i -> {
count.incrementAndGet();
});
System.out.println(count.get());
}
3. array를 사용하는것도 같은 방법.
@Test
public void counterTest() {
final int[] count = { 0, };
IntStream.range(0, 10)
.forEach(i -> {
count[0]++;
});
System.out.println(count[0]);
}
https://stackoverflow.com/a/30213098
4. Consumer...
'프로그래밍' 카테고리의 다른 글
[python] 시스템 시간에 관계없이 KST 가져오기 (0) | 2019.07.19 |
---|---|
create pipfile & pipfile.lock (0) | 2019.05.23 |
OpenAI gym atari install for windows 10 (0) | 2018.01.31 |
MySQL-Python for Python 3+ on windows 10 (0) | 2017.05.26 |
pyodbc 한글 깨짐 문제 (0) | 2016.08.17 |
댓글