람다를 사용한 Comparator.reversed()의 컴파일러 오류 이해
람다 표현식을 사용하여 사용자 객체 목록을 정렬하려고 할 때 다음과 같은 비교기:
List<User> userList = Arrays.asList(u1, u2, u3); userList.sort(Comparator.comparing(u -> u.getName()).reversed());
컴파일러는 다음과 같은 오류를 표시할 수 있습니다. 람다의 u 변수에서 getName() 메서드를 찾을 수 없습니다. 이 문제는 컴파일러 유형 추론 메커니즘의 약점으로 인해 발생합니다.
이 오류를 해결하려면 람다에 대한 대상 유형을 설정해야 합니다. Comparator.comparing()을 사용하여 정렬할 때 람다는 목록의 객체와 동일한 유형의 인수를 가져와야 합니다.
메서드 참조를 사용하는 코드의 첫 번째 줄에서 대상 유형 User라는 메소드 매개변수 유형에서 유추됩니다. 이를 통해 컴파일러는 람다 내에서 u 유형을 올바르게 유추할 수 있습니다.
그러나 메서드 참조 대신 람다 표현식을 사용하는 세 번째 줄에서는 reversed() 호출이 대상 유형을 방해합니다. 추론. 컴파일러는 대상 유형을 수신자에게 다시 전파할 수 없으므로 사용자에게 getName() 메소드가 없는 추론된 유형의 Object가 남게 됩니다.
이 문제를 해결하려면 메소드 참조를 사용하거나 다음과 같이 람다에 u 유형을 명시적으로 지정합니다.
userList.sort(Comparator.comparing((User u) -> u.getName()).reversed());
이렇게 하면 컴파일러가 람다 내에서 u에 대한 올바른 유형을 추론하고 다음에 따라 목록을 성공적으로 정렬할 수 있습니다. 지정된 비교기.
위 내용은 Comparator.comparing().reversed()`가 람다에서 컴파일러 오류를 일으키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!