2014-07-23 5 views
4

제 프로젝트에서 여러 객체의 getter와 setter에 여러 번 액세스해야합니다. 그 때문에 메서드에 동적으로 액세스하는 빠른 메서드를 원합니다.Android에 MethodHandle과 동일한 기능이 있습니까?

Java 7은 주어진 클래스의 메소드를 동적으로 실행하기 위해 MethodHandle 클래스를 도입했습니다. 내가 볼 수 있듯이 JDK의 안드로이드 포트에는 그런 것이 없다. 표준 반사 클래스를 사용하는 것 이외에이를 피하기 위해 사용할 수있는 해결 방법이 있습니까?

+0

"표준 반사 수업을 사용하는 _ _ 다른 이유는 무엇입니까?" – Unihedron

+0

간단한 게터/세터 또는 더 복잡한 것이 무엇입니까? – radai

+0

@Unihedron 내 이해는 MethodHandle이 표준 리플렉션보다 빠르며 내 필요에 대해 리플렉션보다 빠른 방법이 필요하다는 것입니다. 참조를 위해 여기를 참조하십시오 : http://stackoverflow.com/questions/14146570/calling-a-getter-in-java-though-reflection-whats-the-fastest-way-to-repeatedly – LazyOfT

답변

2

당신은 분명히 적절한 Method 객체를 가져 와서 호출 할 수 있습니다.

그러나 더 빠른 방법을 원할 경우 런타임에 대상 메서드를 호출하는 클래스를 생성 할 수 있습니다. 그래서 당신은 미리 정의 된 메소드 (callMethod()?)를 구현하는 MethodCaller 클래스를 생성하고 새로 생성 된 클래스를로드하여 사용하십시오. 안드로이드 런타임 here과 호환되는 라이브러리가 있으며 다른 토론 가능한 대안으로 나열된 here이 있습니다.

이 작업은 수행 할 수 있지만 그 작업은 쉽지 않으며 일반적인 반사 작업을 시도하고 성능을 측정하는 것이 좋습니다. 어쩌면 충분히 잘 작동 할 것입니다.

+0

나는 그것과 같은 무엇인가 두려워했다. 나는 그것을 조사하고 제가 원하는 것을 할 수 있는지 알아 봅니다. – LazyOfT

+0

필자는 코드를 테스트 할 수 있었고 조금 까다 롭긴해도 제대로 작동하는 것으로 보입니다. 감사. – LazyOfT

+0

'Method'처럼 보이면 직접 수퍼 메소드를 호출 할 수 없습니다 (예 : 메소드가 MyListViewSubclass # arrowScroll에서 ListView # arrowScroll을 호출 할 수 없음). – nmr

관련 문제