나는 Java 8 features에 대해 읽고 있었고 메서드 참조가 있다는 것을 알았지 만 메서드가 오버로드되었을 때 어떤 메서드를 지정하는 방법을 알지 못했습니다. 아는 사람 있나요?비어 있지 않은 인수에 대한 메소드 참조?
13
A
답변
5
:
람다 표현식은 사용할 수 있습니까? 타겟 타입은 매개 변수 적절한 유형되는
방법 또는 생성자 인자. 메서드 또는 생성자가 오버로드 된 경우 표현식이 대상 유형과 일치하기 전에 일반적인 과부하 해결 메커니즘이 사용됩니다. 과부하 해결 후 기능 설명자가있는 여러 기능 메서드 또는 생성자 서명이 다른 기능 인터페이스를 수락 할 수 있습니다.이 경우 람다 식은 이어야하며 이러한 기능 인터페이스 중 하나의 형식으로 캐스트되어야합니다. ;
명시 적으로 대상 유형을 제공하는 캐스트 표현식입니다. 예를 들어 :
Object o =() -> { System.out.println("hi"); }; // Illegal: could be Runnable or Callable (amongst others)
Object o = (Runnable)() -> { System.out.println("hi"); }; // Legal because disambiguated
그래서, 당신은 모호한 서명이있는 경우를 캐스팅해야합니다.
6
컴파일러는 메소드 서명을 기능 인터페이스와 일치시킵니다.
Integer foo(){...}
Integer foo(Number x){...}
Supplier<Number> f1 = this::foo; //()->Number, matching the 1st foo
Function<Integer, Number> f2 = this::foo; // Int->Number, matching the 2nd foo
기본적으로 f2
이 Integer
을 수용하고 Number
를 반환 할 수있는 일이며, 컴파일러는 2 foo()
이 요구 사항을 충족하는지 확인할 수 있습니다. this Lambda FAQ에서
관련 문제
- 1. COUNTIF 비어 있지 않은 셀과 비어 있지 않은 셀
- 2. 비어 있지 않은 디렉토리 삭제
- 3. PHP가 비어 있지 않은지 확인하는 더 좋은 방법입니까? 체크 비어 있지 않은 VAR에 대한
- 4. "폴더가 비어 있지 않은 경우"
- 5. LINQ는 비어 있지 않은 문자열
- 6. MySQL이 비어 있지 않은 열
- 7. 비어 있지 않은 숫자 벡터?
- 8. PHP는 MySQL은 행은 비어 있고 경우 비어 있지 않은 경우
- 9. 정의되지 않은 함수 또는 메소드 '더블'유형의 입력 인수에 대한 'INT'는
- 10. 셀이 비어 있지 않은 경우에만 수식
- 11. 메소드 인수에 대한 검사를 더 빠르게 수행
- 12. 비어 있지 않은 마지막 세 개의 셀을 처음 세 개의 비어 있지 않은 셀로 나눕니다.
- 13. VBA 배열의 비어 있지 않은 요소 수
- 14. C++ 정의되지 않은 메소드 참조
- 15. 매크로에 비어 있지 않은 args의 수가 전달되었습니다.
- 16. 'CGContextClearRect : 비어 있지 않은 경로로 소위'맥
- 17. Excel에서 마지막 비어 있지 않은 셀을 가져 오거나 비어 있지 않은 헤더로 가져옵니다.
- 18. Postgres jsonb 배열 : 비어 있지 않은 교차점에 대한 쿼리
- 19. Spring Validate 비어 있지 않은 요소에 대한 문자열 목록
- 20. PostgreSQL : 비어 있지 않은 JSON 객체에 대한 CHECK 제약
- 21. MDX - 비어 있지 않은 큰 crossjoin - 성능
- 22. 안드로이드 : 비어 있지 않은 입력을위한 edittext를 확인해야합니다.
- 23. CSS : 비어 있지 않은 사전 내용
- 24. JSpinner의 값이 비어 있지 않은 조건을 나타냅니다.
- 25. 값이 비어 있지 않은 Jquery prev() tr
- 26. 비어 있지 않은 값이 같은 강조 입력
- 27. 비어 있지 않은 객체를 얻으려고 시도하십시오.
- 28. Oracle - 비어 있지 않은 값 가져 오기
- 29. 다시 부팅시 비어 있지 않은 폴더 삭제
- 30. 비어 있지 않은 고유 한 키 레일
람다 식은 기능 인터페이스의 약자이므로 메서드의 유형은 인터페이스의 메서드에서 유추 할 수 있어야합니다. –
@ LeonardBrünings : 이것은 람다 표현식을 말하는 것이 아니라 메소드 참조를 지칭합니다. 람다 식은 함수의 구현입니다. 메소드 참조는 기존 클래스의 기존 메소드에 대한 참조입니다. –
@LouisWasserman 내가 링크 된 기사에 따르면 방법 참조는 람다이므로 내 태그로 구현 될 것입니다. – ArtB