익명 클래스의 다이아몬드 연산자
다이아몬드 연산자가 이제 익명 클래스에서도 작동합니다.
코드 비교
✕ Java 7/8
Map<String, List<String>> map =
new HashMap<String, List<String>>();
// anonymous class: no diamond
Predicate<String> p =
new Predicate<String>() {
public boolean test(String s) {..}
};
✓ Java 9+
Map<String, List<String>> map =
new HashMap<>();
// Java 9: diamond with anonymous classes
Predicate<String> p =
new Predicate<>() {
public boolean test(String s) {..}
};
이 코드에 문제가 있나요? 알려주세요.
모던 방식이 더 나은 이유
일관된 규칙
다이아몬드는 생성자와 익명 클래스 어디서든 작동합니다.
중복 감소
타입 인수를 왼쪽에 한 번만 명시합니다.
DRY 원칙
컴파일러가 이미 타입을 알고 있는데 왜 두 번 써야 합니까?
이전 방식
타입 인수 반복
모던 방식
다이아몬드 <>
JDK 버전
9
난이도
초급
JDK 지원
익명 클래스의 다이아몬드 연산자
사용 가능
익명 클래스의 다이아몬드는 JDK 9 (2017년 9월) 이후 사용 가능.
동작 원리
Java 7에서 <>를 도입했지만 익명 내부 클래스에서는 작동하지 않았습니다. Java 9에서 이를 수정하여 우변에 타입 인수를 반복할 필요가 없습니다.
관련 문서