Kotlin에서 메소드 참조의 결과는 kotlin.reflect 패키지에 저장됩니다. Java에서 method-reference도 reflection-api의 일부입니까?Java 메소드에서 참조 API의 일부로 참조됩니다.
답변
메소드 참조에 대한 기능 인터페이스를 구현하는 실제 유형은 의도적으로 지정되지 않습니다. 중요한 것은 현재 JRE에서 제공한다는 것입니다.
실질적으로 HotSpot/OpenJDK의 경우, 메소드 참조를 포함하는 클래스와 동일한 패키지 및 클래스 로딩 컨텍스트 내에있는 런타임 생성 클래스입니다. 특수 클래스를 상속하지 않으며 대상 유형으로 정의 된 인터페이스 외에 다른 인터페이스를 구현하지 않습니다. 따라서이 클래스에는 이름으로 조회 할 수없는 특수 속성이 있지만 해당 클래스 로더의 도달 가능성에 관계없이 가비지 수집 될 수 있지만 Reflection API의 일부는 아닙니다. 다음과 같은 방법을 참조 만들어 인스턴스
속성은 the Java Language Specification 의해 지정되어
가방법 참조 식의 값은 다음의 특성을 갖는 클래스 인스턴스에 대한 참조 :
- 클래스는 대상 기능 인터페이스 유형 및 목표 유형이 교차 유형 인 경우 교차로에 언급 된 모든 다른 인터페이스 유형을 구현합니다. 상기 방법은 기준 식은 각 비
static
멤버 메소드U
의m
들어U
입력있다- :
U
기능 유형m
의 서명의 subsignature있는 경우는 그 클래스는 호출 선언 메서드은
m
을 재정의합니다. 호출 메소드의 본문은 아래에 설명 된 것처럼 참조 된 메소드를 호출하거나, 클래스 인스턴스를 작성하거나, 배열을 작성합니다. 호출 메소드의 결과가void
이 아닌 경우, 본문은 필요한 할당 변환 (5.2 절) 후에 메소드 호출 또는 오브젝트 작성의 결과를 리턴합니다.오버라이드중인 메소드 유형의 지우기가 해당 함수 유형이
U
인 지우 기와 서명이 다른 경우, 메소드 호출 또는 오브젝트 작성 이전에 호출 메소드 본문이 각 인수 값이 인스턴스인지 점검합니다 함수 타입이U
인 대응하는 파라미터 형의 삭제의 서브 클래스 또는 서브 인터페이스. 그렇지 않은 경우ClassCastException
이 발생합니다.- 클래스는
Object
클래스의 메서드를 재정의 할 수 있지만 위에서 언급 한 기능 인터페이스 형식 또는 다른 인터페이스 형식의 다른 메서드를 재정의합니다.