2014-03-06 2 views
2

그래서 나는 위로 올라가는 jdk8을 실험 중이며 새로운 Method 참조에 약간의 괴짜가 발생했습니다.java 8 방법 참조 및 반영

Method 참조에서 생성 된 일반 기능 인터페이스 인스턴스의 인수에 대해 유형을 검사하는 방법이 있습니까?

Class 메서드 참조의 getClass()에 의해 반환 된 객체에는 메서드, 필드 또는 의미있는 수퍼 클래스가 없습니다. 클래스 이름조차도 의미있는 정보를 담고 있지 않습니다.

답변

4

귀하의 질문은 명확하지 않습니다. 나는 당신이 메서드 참조를 의미하는 메서드를 처리한다고 가정합니다. 메소드 참조는 유형이 지정된 변수에 할당 할 때까지 유형을 갖지 않습니다. 그 유형이 String xxx(); 방법이있는 모든 기능 인터페이스 수 :

class A { public String m() { return ""; } } 

그런 다음 A::m이 유형을 가지고 있지 않습니다

은이 방법을 말한다. 예를 들어, 그것과 같을 수

System.out.println(s.getClass().getDeclaredMethods()[0]); 

인쇄 :

Supplier<String> s = A::m; 

되는 경우

Supplier 인터페이스에있어서의 소거 서명과 일치
public java.lang.Object mypackage.A$Lambda$1/1554547125.get() 

.

+0

당신 말이 맞습니다. 나는'getDeclaredMethod'를 놓쳤다. 매개 변수 유형을 잊어 버렸다. –

+0

왜'A :: m'에 대한 비 정적 메소드 m()을 타입 A에서 정적 참조로 만들 수 없습니까? – nickmesi

+0

@UsermujM 네가 맞다.'m()'은 정적 일 필요가있어. – assylias