2017-11-15 9 views

답변

2

메소드 참조에 대한 기능 인터페이스를 구현하는 실제 유형은 의도적으로 지정되지 않습니다. 중요한 것은 현재 JRE에서 제공한다는 것입니다.

실질적으로 HotSpot/OpenJDK의 경우, 메소드 참조를 포함하는 클래스와 동일한 패키지 및 클래스 로딩 컨텍스트 내에있는 런타임 생성 클래스입니다. 특수 클래스를 상속하지 않으며 대상 유형으로 정의 된 인터페이스 외에 다른 인터페이스를 구현하지 않습니다. 따라서이 클래스에는 이름으로 조회 할 수없는 특수 속성이 있지만 해당 클래스 로더의 도달 가능성에 관계없이 가비지 수집 될 수 있지만 Reflection API의 일부는 아닙니다. 다음과 같은 방법을 참조 만들어 인스턴스

속성은 the Java Language Specification 의해 지정되어

방법 참조 식의 값은 다음의 특성을 갖는 클래스 인스턴스에 대한 참조 :

  • 클래스는 대상 기능 인터페이스 유형 및 목표 유형이 교차 유형 인 경우 교차로에 언급 된 모든 다른 인터페이스 유형을 구현합니다. 상기 방법은 기준 식은 각 비 static 멤버 메소드 Um 들어 U 입력있다
  • : U 기능 유형 m의 서명의 subsignature있는 경우

    는 그 클래스는 호출 선언 메서드m을 재정의합니다. 호출 메소드의 본문은 아래에 설명 된 것처럼 참조 된 메소드를 호출하거나, 클래스 인스턴스를 작성하거나, 배열을 작성합니다. 호출 메소드의 결과가 void이 아닌 경우, 본문은 필요한 할당 변환 (5.2 절) 후에 메소드 호출 또는 오브젝트 작성의 결과를 리턴합니다.

    오버라이드중인 메소드 유형의 지우기가 해당 함수 유형이 U 인 지우 기와 서명이 다른 경우, 메소드 호출 또는 오브젝트 작성 이전에 호출 메소드 본문이 각 인수 값이 인스턴스인지 점검합니다 함수 타입이 U 인 대응하는 파라미터 형의 삭제의 서브 클래스 또는 서브 인터페이스. 그렇지 않은 경우 ClassCastException이 발생합니다.

  • 클래스는 Object 클래스의 메서드를 재정의 할 수 있지만 위에서 언급 한 기능 인터페이스 형식 또는 다른 인터페이스 형식의 다른 메서드를 재정의합니다.