LinkerServices

LinkerServices (링커 서비스)

자신을 소유한 DynamicLinkerGuardingDynamicLinker 인스턴스들에게 제공하는 서비스를 나타내는 인터페이스입니다. 링커들이 호출을 연결하는 과정에서 활용하는 여러 보조 기능을 담고 있어요.

출처: Java API Reference

본문

GuardingDynamicLinker가 링크를 만들 때 사용하는 다양한 유틸리티를 모아 둔 인터페이스입니다. 타입 변환, 타입 비교, 가드된 호출 재위임 같은 기능을 제공해 각 언어별 링커가 저수준 세부사항을 직접 구현하지 않아도 되게 해 줍니다.

주요 메서드

  • asType(MethodHandle handle, MethodType fromType)MethodHandle.asType과 비슷하되, 사용 가능한 모든 GuardingTypeConverterFactory 구현이 만든 메서드 핸들도 연결해서 언어별 매개변수 타입 변환(coercion)을 적용합니다. 프리미티브 간·래퍼와 프리미티브·업캐스트 변환은 MethodHandle.asType을 적용하고, 그 밖의 변환은 MethodHandles.filterArguments 등으로 처리해요.

  • asTypeLosslessReturn(MethodHandle handle, MethodType fromType)asType과 비슷하지만 반환 값 타입 변환을 특별히 다룹니다. 정밀도나 크기를 잃지 않는 변환만 적용해요.

  • canConvert(Class<?> from, Class<?> to) — 요청한 타입 사이에 변환이 존재할 수 있으면(자동 JVM 변환이나 사용 가능한 GuardingTypeConverterFactory가 제공하는 변환) true를, 확실히 존재하지 않으면 false를 반환합니다.

  • compareConversion(Class<?> sourceType, Class<?> targetType1, Class<?> targetType2) — 소스 타입에서 두 타깃 타입으로의 변환 중 어느 쪽이 선호되는지 결정합니다.

  • getTypeConverter(Class<?> sourceType, Class<?> targetType) — 주어진 소스·타깃 타입 사이를 변환하는 메서드 핸들을 반환합니다.

  • filterInternalObjects(MethodHandle target) — 런타임 내부 객체를 받을 수 있는 매개변수에 필터를 추가해(있다면 감싸서) 외부로 유출되지 않게 방지하도록 메서드 핸들을 수정합니다.

  • getGuardedInvocation(LinkRequest linkRequest) — 이 링커 서비스 객체를 노출한 DynamicLinker로 다시 위임하는 가드된 호출을 만듭니다.

  • getWithLookup(Supplier<T> operation, SecureLookupSupplier lookupSupplier) — 특정 MethodHandles.Lookup 룩업 객체의 컨텍스트 안에서 주어진 연산을 실행합니다.

더 알아보기

Java 공식 API