s
다음 람다 식에서 다음으로 대체 했습니다 _
.
s -> Integer.parseInt(s)
Eclipse 컴파일러는 다음과 같이 말합니다.
'_'는 소스 레벨 1.8부터 예약 된 키워드이므로 식별자로 사용해서는 안됩니다.
JLS §3.9 어휘 구조 / 키워드 에서 설명을 찾지 못했습니다 .
답변:
살펴볼 곳은 JLS §15.27.1입니다. Lambda 매개 변수
람다 매개 변수의 이름이 _ (즉, 단일 밑줄 문자) 인 경우 컴파일 타임 오류입니다.
어떤 상황에서든 변수 이름 _을 사용하지 않는 것이 좋습니다. Java 프로그래밍 언어의 향후 버전에서는이 이름을 키워드로 예약하거나 특수한 의미를 부여 할 수 있습니다.
따라서 Eclipse 메시지는 오해의 소지가 있습니다. 특히 람다 매개 변수에 대해 오류가 생성되거나 다른 _
식별자에 대해 경고가 생성 될 때 두 경우 모두에 동일한 메시지가 사용되기 때문 입니다.
enum
와 assert
법적 식별자는 ... 있었다
JEP 302의 2 단계 로 람다 식에서 사용되지 않는 매개 변수를 표시하기 위해 특수 문자로 밑줄을 추가 할 예정입니다.
밑줄 처리
많은 언어에서 밑줄 (
_
)을 사용하여 이름이 지정되지 않은 람다 매개 변수를 나타내는 것이 일반적입니다 .
BiFunction<Integer, String, String> biss = (i, _) -> String.valueOf(i);
이렇게하면 사용되지 않는 인수에 대한보다 강력한 정적 검사가 가능하고 여러 인수가 사용되지 않음으로 표시 될 수 있습니다. 그러나 밑줄은 Java 8에서 유효한 식별자 였기 때문에 호환성으로 인해 Java에서 밑줄이이 역할을 수행 할 수있는 위치에 대한보다 간접적 인 경로를 취해야했습니다. 1 단계는 Java 8에서 람다 형식 매개 변수 이름으로 밑줄을 금지했으며 (이전에 람다가 존재하지 않았기 때문에 호환성 결과가 없음) 다른 위치에서 밑줄을 식별자로 사용하는 것에 대한 경고가 발행되었습니다. 이 경고가 오류가되었을 때 2 단계는 Java 9에서 왔습니다. 이제 사용되지 않은 람다, 메서드 또는 catch 형식 매개 변수를 나타 내기 위해 계획된 밑줄 재활을 자유롭게 완료 할 수 있습니다.
$
목적으로 사용하고 있습니다 .
Java SE 9에 대한 Java 언어 변경 https://docs.oracle.com/javase/9/language/toc.htm#JSLAN-GUID-16A5183A-DC0D-4A96-B9D8-AAC9671222DD
Java 9에서 _ 문자는 람다 컨텍스트 내 에서뿐만 아니라 더 이상 식별자로 사용할 수 없습니다.
밑줄 문자는 법적 이름이 아닙니다.
밑줄 문자 ( "_") 식별자를 사용하면 소스 코드를 더 이상 컴파일 할 수 없습니다.
_
부터는 람다 매개 변수 이름뿐만 아니라 유효한 식별자 이름으로도 허용되지 않습니다. 이것은 실제로 빌드 43에서 수정되었습니다. bugs.openjdk.java.net/browse/JDK-8061549