반응형
해당 에러는 람다(Lambda)식을 사용할 때 발생하는 에러인데
String 배열 arr을 stream 형태로 변환한 뒤 forEach를 돌리면서
String s에 ABC를 넣어주려고 하는 코드인데
보면
Local variable '변수명' defined in an enclosing scope must be final or effectively final
이런 에러가 뜨는 것이 보인다
이건 람다 안이 anonymous inner class이기 때문에
자바 컴파일러가
val -> val과 같이 파라미터로 사용하는 변수와
로컬 변수를 구분을 하지 못하기 때문에
미리 저런 에러가 뜨는 것이다
즉 로컬 변수는
람다식 안에서 변경이 불가능하기 때문에
해결방법은
위와 같이 변수를
클래스 단에서 만든 뒤에 사용해주면 된다
마지막으로 예제에 사용한 코드는 아래와 같다
public class Test1 {
String s = "";
public static void main(String[] args) {
String[] arr = {"A", "B", "C"};
Test1 t1 = new Test1();
Arrays.stream(arr).forEach(val -> {
t1.s = t1.s + val;
});
System.out.println(t1.s);
}
}
반응형
'Error & Fix' 카테고리의 다른 글
MySQL Builtin:list-members 에러 해결방법 (0) | 2021.01.07 |
---|---|
자바 Lambda expression's parameter '변수명' cannot redeclare another local variable defined in an enclosing scope. 에러 해결방법 (0) | 2020.12.09 |
자바 The local variable '변수명' may not have been initialized 에러 해결방법 (2) | 2020.12.09 |
오라클 ORA-30081: 날짜시간 또는 간격 연산에 데이터 유형이 부적합합니다 에러 해결방법 (0) | 2020.12.09 |
오라클 ORA-30089: <날짜시간 필드>가 빠졌거나 부적합합니다 에러 해결방법 (0) | 2020.12.08 |
댓글