Lookup

Lookup (체크 예외를 감춘 룩업 래퍼)

MethodHandles.Lookup를 감싸면서 체크 예외를 마스킹하는 래퍼 클래스입니다. 자신의 코드베이스 안에서 메서드를 찾을 때(따라서 존재하지 않으면 오류인 경우) 유용해요.

출처: Java API Reference

본문

MethodHandles.Lookup의 각 findXXX 메서드는 체크 예외를 던집니다. 이 래퍼는 그 체크 예외를 해당하는 Error로 변환해, 코드가 더 간결해지도록 도와줍니다. 예를 들어 findGetterIllegalAccessExceptionIllegalAccessError로, NoSuchFieldExceptionNoSuchFieldError로 바꿔요.

필드와 생성자

  • PUBLICMethodHandles.publicLookup()을 감싼 표준 Lookup 객체입니다.
  • Lookup(MethodHandles.Lookup lookup) — 주어진 MethodHandles.Lookup 인스턴스에 바인딩된 새 래퍼를 만듭니다.

주요 메서드

  • findGetter(Class<?> refc, String name, Class<?> type)MethodHandles.Lookup.findGetter를 수행하고, IllegalAccessExceptionIllegalAccessError로, NoSuchFieldExceptionNoSuchFieldError로 변환합니다.

이런 예외 변환 덕분에, 자신이 반드시 존재할 것이라고 알고 있는 코드베이스 안의 멤버를 조회할 때 try-catch 없이 깔끔하게 쓸 수 있어요. 멤버가 사라진 것은 곧 프로그래밍 오류이므로 체크 예외보다는 에러로 표면화하는 게 타당한 경우가 많습니다.

  • findStatic(Class<?>, String, MethodType) / findVirtual(...) / findSpecial(...) — 기반 룩업에서 해당 조회를 수행합니다.

  • findOwnStatic(String name, Class<?> rtype, Class<?>... ptypes) / findOwnSpecial(...) — 룩업 대상 클래스 자신의 정적 메서드나 특수 메서드를 찾습니다. 정적 오버로드도 있어요.

더 알아보기

Java 공식 API