TIL
java 람다식에서는 종단변수를 사용해야함.
하얀잔디
2024. 6. 5. 15:57
String searchText = "";
if(searchText==null) searchText="";
eventNameList = Arrays.stream(EventNameEnum.values())
.filter(e -> e.getDescription().contains(searchText))
.map(Enum::name)
.collect(Collectors.toList());
String searchText =""
eventNameList = Arrays.stream(EventNameEnum.values())
.filter(e -> e.getDescription().contains(searchText))
.map(Enum::name)
.collect(Collectors.toList());
와 같은 코드에서는 문제가 없다. 하지만 윗부분을 살짞 바꿔서
searchText에 대한 null을 빈칸으로 바꾸면 에러가 나타난다.
String searchText = "";
if(searchText==null) searchText="";
eventNameList = Arrays.stream(EventNameEnum.values())
.filter(e -> e.getDescription().contains(searchText))
.map(Enum::name)
.collect(Collectors.toList());
이유는 자바 람다식은 '종단변수' 를 사용해야한다.
종단변수란 변하지 않는 변수를 말한다. 이래야 하는 이유는
Java에서는 람다 표현식이나 익명 클래스에서 외부 변수를 참조할 때, 그 변수는 종단 변수이어야 합니다. 이는 람다 표현식이나 익명 클래스가 외부 변수의 변경을 안전하게 처리할 수 있도록 하기 위해서이다.
참고)