(전통적인 리플렉션 대신) 프레임 워크 / 라이브러리에서 MethodHandle을 사용할 수 있습니까?

제프리 드 스멧

내 프레임 워크에는 다음과 같은 클래스가 있습니다.

public class Foo<B, V> {
    private final Method getterMethod;
    ...

    public V executeGetter(B bean) {
        try {
           return getterMethod.invoke(bean);
        } catch ...
    }
}

이 클래스는 내 프레임 워크의 컴파일 타임에 사용할 수없는 사용자가 만든 클래스의 getter를 호출하는 데 사용됩니다. 예를 B들어라는 클래스가 될 수 있습니다 Person.

프로파일 링을 통해이 방법이 매우 느리다는 것을 발견했습니다. Method.invoke()(심지어 프로파일로 샘플의 성능의 40 %를 얻어 setAccessible(true)비 반사 구현하는 성능의 작은 부분을 취하면서).

그래서 교체하고 싶습니다 MethodHandle.

public class Foo<B, V> {
    private final MethodHandle getterMethodHandle;
    ...

    public V executeGetter(B bean) {
        try {
           return getterMethodHandle.invoke(bean);
        } catch ...
    }
}

하지만 다음 예외가 발생합니다.

java.lang.ClassCastException: Cannot cast [Ljava.lang.Object; to Person
    at sun.invoke.util.ValueConversions.newClassCastException(ValueConversions.java:461)
    at sun.invoke.util.ValueConversions.castReference(ValueConversions.java:456)
    at ...Foo.executeGetter(Foo.java:123)

bean의 인스턴스 이지만 Person. 이제 오해 부분은이 캐스팅하려고한다는 것입니다 Object[](아닌 Object)에 Person. 개체 배열로 래핑하면 (성능 손실) 도움이되지 않습니다.

 return getterMethodHandle.invoke(new Object[]{bean}); // Same exception

그것은 얻을 수 있습니다 MethodHandle이러한 상황에서 작업을?

제프리 드 스멧

그건 ClassCastException당신이 소스 / 목표 수준 자바 6 컴파일하는 경우에만 발생합니다.

이를 방지하려면 소스 / 타겟 레벨 7 이상으로 컴파일하십시오ClassCastException .

Tagir의 답변 덕분에 답변을 찾았습니다. (그의 대답도 투표하십시오)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

타사 라이브러리 프레임 워크로 iOS 앱을 개발할 수 있습니까?

분류에서Dev

.ipa 파일을 편집하고 새 프레임 워크 / 라이브러리를 연결할 수 있습니까?

분류에서Dev

다른 애플리케이션에서 Angular DI 프레임 워크를 사용할 수 있습니까?

분류에서Dev

다른 애플리케이션에서 Angular DI 프레임 워크를 사용할 수 있습니까?

분류에서Dev

ionic 프레임 워크를 사용하여 웹 애플리케이션을 만들 수 있습니까?

분류에서Dev

Kindle 온라인 포맷 프레임 워크 또는 도구를 웹 애플리케이션에 사용할 수 있습니까?

분류에서Dev

라이브러리 / 프레임 워크에서 애플리케이션 종료를 수신 하시겠습니까?

분류에서Dev

NSNotificationCenter를 서로 다른 프레임 워크간에 사용하여 통신 할 수 있습니까?

분류에서Dev

콘솔 애플리케이션을 SWING 프레임 워크로 어떻게 변환 할 수 있습니까?

분류에서Dev

yii 프레임 워크의 세션을 타사 애플리케이션으로 어떻게 사용할 수 있습니까?

분류에서Dev

플라스크 프레임 워크 pymysql을 사용하여 데이터를 쿼리 할 수 없습니다.

분류에서Dev

웹 앱에서 플러그인 처리에 사용할 수있는 프레임 워크

분류에서Dev

웹 앱에서 플러그인 처리에 사용할 수있는 프레임 워크

분류에서Dev

sbt를 사용하여 Play 프레임 워크 웹 애플리케이션을 만들 수 없습니까?

분류에서Dev

리프트 프레임 워크에서 알 수없는 모든 URL을 어떻게 리디렉션 할 수 있습니까?

분류에서Dev

모든 라이브러리에서 사용할 수 있도록 로봇 프레임 워크에서 명령 줄 인수를 전달하는 방법은 무엇입니까?

분류에서Dev

목록 / 사전을 로봇 프레임 워크의 테스트 라이브러리로 전송할 수 없습니다.

분류에서Dev

특정 프로세스 (애플리케이션)에 대한 네트워크 사용을 예약 / 제한 할 수 있습니까?

분류에서Dev

사진 프레임 워크를 통해 사진 라이브러리에 특정 파일을 추가 할 수 있는지 확인하는 방법은 무엇입니까?

분류에서Dev

서버리스 프레임 워크를 사용하면 업데이트 대신 인식 사용자 풀을 대체하는 방법은 무엇입니까?

분류에서Dev

Android에서 복잡한 대화식 UI 계층을 그리는 데 사용할 수있는 프레임 워크는 무엇입니까? (iOS의 CoreAnimation처럼)

분류에서Dev

여러 DLL (동적 링크 라이브러리)이 LIB (정적 라이브러리)에서 스레드 로컬 저장소를 공유 할 수 있습니까?

분류에서Dev

Xamarin.iOS 바인딩 라이브러리는 보안 프레임 워크의 SecKey API를 사용할 수 없습니다.

분류에서Dev

LINQ to Entities에서 리플렉션을 사용하여 동적 테이블을 쿼리 할 수 있습니까?

분류에서Dev

yii 프레임 워크에 로그인하지 않으면 어떻게 로그인 페이지를 리디렉션 할 수 있습니까?

분류에서Dev

github의 nulab / scala-oauth2-provider 라이브러리를 play와 함께 사용할 수 있습니까? 2.0.4 프레임 워크

분류에서Dev

Django Rest 프레임 워크 애플리케이션을 GCP Cloud SQL에 연결할 수 없습니다.

분류에서Dev

MongoDB 집계 프레임 워크에 Scipy 보간 기능을 적용 할 수 있습니까?

분류에서Dev

IOSurface 프레임 워크를 사용하여 프로덕션 화면을 녹화 할 수 있습니까?

Related 관련 기사

  1. 1

    타사 라이브러리 프레임 워크로 iOS 앱을 개발할 수 있습니까?

  2. 2

    .ipa 파일을 편집하고 새 프레임 워크 / 라이브러리를 연결할 수 있습니까?

  3. 3

    다른 애플리케이션에서 Angular DI 프레임 워크를 사용할 수 있습니까?

  4. 4

    다른 애플리케이션에서 Angular DI 프레임 워크를 사용할 수 있습니까?

  5. 5

    ionic 프레임 워크를 사용하여 웹 애플리케이션을 만들 수 있습니까?

  6. 6

    Kindle 온라인 포맷 프레임 워크 또는 도구를 웹 애플리케이션에 사용할 수 있습니까?

  7. 7

    라이브러리 / 프레임 워크에서 애플리케이션 종료를 수신 하시겠습니까?

  8. 8

    NSNotificationCenter를 서로 다른 프레임 워크간에 사용하여 통신 할 수 있습니까?

  9. 9

    콘솔 애플리케이션을 SWING 프레임 워크로 어떻게 변환 할 수 있습니까?

  10. 10

    yii 프레임 워크의 세션을 타사 애플리케이션으로 어떻게 사용할 수 있습니까?

  11. 11

    플라스크 프레임 워크 pymysql을 사용하여 데이터를 쿼리 할 수 없습니다.

  12. 12

    웹 앱에서 플러그인 처리에 사용할 수있는 프레임 워크

  13. 13

    웹 앱에서 플러그인 처리에 사용할 수있는 프레임 워크

  14. 14

    sbt를 사용하여 Play 프레임 워크 웹 애플리케이션을 만들 수 없습니까?

  15. 15

    리프트 프레임 워크에서 알 수없는 모든 URL을 어떻게 리디렉션 할 수 있습니까?

  16. 16

    모든 라이브러리에서 사용할 수 있도록 로봇 프레임 워크에서 명령 줄 인수를 전달하는 방법은 무엇입니까?

  17. 17

    목록 / 사전을 로봇 프레임 워크의 테스트 라이브러리로 전송할 수 없습니다.

  18. 18

    특정 프로세스 (애플리케이션)에 대한 네트워크 사용을 예약 / 제한 할 수 있습니까?

  19. 19

    사진 프레임 워크를 통해 사진 라이브러리에 특정 파일을 추가 할 수 있는지 확인하는 방법은 무엇입니까?

  20. 20

    서버리스 프레임 워크를 사용하면 업데이트 대신 인식 사용자 풀을 대체하는 방법은 무엇입니까?

  21. 21

    Android에서 복잡한 대화식 UI 계층을 그리는 데 사용할 수있는 프레임 워크는 무엇입니까? (iOS의 CoreAnimation처럼)

  22. 22

    여러 DLL (동적 링크 라이브러리)이 LIB (정적 라이브러리)에서 스레드 로컬 저장소를 공유 할 수 있습니까?

  23. 23

    Xamarin.iOS 바인딩 라이브러리는 보안 프레임 워크의 SecKey API를 사용할 수 없습니다.

  24. 24

    LINQ to Entities에서 리플렉션을 사용하여 동적 테이블을 쿼리 할 수 있습니까?

  25. 25

    yii 프레임 워크에 로그인하지 않으면 어떻게 로그인 페이지를 리디렉션 할 수 있습니까?

  26. 26

    github의 nulab / scala-oauth2-provider 라이브러리를 play와 함께 사용할 수 있습니까? 2.0.4 프레임 워크

  27. 27

    Django Rest 프레임 워크 애플리케이션을 GCP Cloud SQL에 연결할 수 없습니다.

  28. 28

    MongoDB 집계 프레임 워크에 Scipy 보간 기능을 적용 할 수 있습니까?

  29. 29

    IOSurface 프레임 워크를 사용하여 프로덕션 화면을 녹화 할 수 있습니까?

뜨겁다태그

보관