JEP 323: Local-Variable Syntax for Lambda Parameters
암시 적으로 형식화 된 람다 식의 형식 매개 변수를 선언 할 때 var를 허용
목표
- 암시 적으로 형식화 된 람다 식의 형식적 매개 변수 선언 구문을 로컬 변수 선언 구문과 맞춥니다
비목표
- 변수 선언의 다른 종류 (예 : 메소드의 형식 매개 변수)의 구문을 로컬 변수 선언의 구문과 맞춥니다.
1 | 람다 식의 형식 매개 변수는 선언 된 형식 또는 유추 된 형식을 가질 수 있습니다. |
Java SE 10은 지역 변수에 대해 암묵적인 타이핑을 가능하게합니다
1 |
|
지역 변수의 균일 성을 위해 암시 적으로 형식화 된 람다 식의 형식 매개 변수에 ‘var’을 허용합니다
1 |
|
균일 성의 한 가지 이점은 수정 자, 특히 주석이 간결함을 잃지 않고 지역 변수 및 람다 형식에 적용될 수 있다는 것입니다.
1 |
|
암시 적으로 형식화 된 람다 식의 형식 매개 변수의 경우 예약 된 형식 이름 var을 사용 하도록 허용하십시오 .
1 |
|
아래 처럼 암시 적으로 형식화 된 람다 식은 var모든 형식 매개 변수에 대해 또는 모두에 대해 사용해야 합니다.
또한 var암시 적으로 형식화 된 람다 식의 형식 매개 변수에 대해서만 허용됩니다.
명시 적 형식의 람다 식은 모든 형식 매개 변수에 대해 매니페스트 형식을 계속 지정 하므로 일부 형식 매개 변수의 경우 매니페스트 형식을 사용할 수 없습니다
1 | (x, y) -> x.process(y) |
아래의 예제는 잘못 된 것입니다.
1 | (var x, y) -> x.process(y) |
이론 상으로는 위의 마지막 줄과 같은 람다 표현식을 사용하는 것이 가능합니다.이 표현식은 반자동 형식 (또는 사용자의 관점에 따라 반 암시 적 형식)입니다.
그러나 형식 유추 및 과부하 해결에 깊이 영향을주기 때문에이 JEP의 범위를 벗어납니다.
이것은 람다식이 모든 매니페스트 매개 변수 유형을 지정해야하는지 또는 없음을 지정하는 제한을 유지하는 주된 이유입니다.
암시 적으로 형식화 된 람다 식의 매개 변수에 대해 유추 된 유 형 var이 사용 여부와 관계없이 동일하도록 적용하려고합니다 .
우리는 미래 JEP에서 부분 추론의 문제로 돌아갈 수 있습니다.
또한 속기 구문의 간결함을 손상시키지 않으므로 다음과 같은 표현을 허용하지 않습니다.
1 |
|
대안은 기존에 Java SE 8에서와 같이 암시 적으로 형식화 된 람다 식을 계속 선언합니다.
위험
이 JEP는 var암시 적으로 형식화 된 람다 식의 매개 변수 이름 앞에 추가 될 때 소스 비호 환성의 위험이 없습니다 . 매개 변수없이 var유추 된 유 형이 유추 된 유 형과 동일 하기 때문 입니다.