CallSiteDescriptor

CallSiteDescriptor (콜 사이트 설명자)

콜 사이트를 연결하는 데 필요한 모든 정보를 담는 불변 클래스입니다. 이 정보는 보통 부트스트랩 메서드에 매개변수로 전달되며, 콜 사이트가 위치한 호출자 클래스의 MethodHandles.Lookup 객체, 콜 사이트의 동적 연산, 그리고 콜 사이트의 메서드 타입으로 구성돼요. Dynalink에서 DynamicLinker가 이후 사용하기 위해 이 매개변수들을 담아 저장하는 객체입니다.

출처: Java API Reference

본문

내장 RelinkableCallSite 구현들의 생성자는 모두 콜 사이트 설명자를 받습니다. 이 클래스는 반드시 불변(immutable)이어야 해요. 그대로 쓰거나, 특히 설명자에 추가 정보(주로 부트스트랩 메서드의 추가 매개변수로 전달된 값들)가 필요할 때 하위 클래스를 만들 수도 있습니다. 불변이어야 하므로 동등한 설명자끼리는 캐시를 만들어 콜 사이트들이 공유하게 할 수 있어요.

이 클래스는 SecureLookupSupplier를 상속해, 자신이 지닌 MethodHandles.Lookup 객체에 보안 검사된 접근을 제공합니다. 이 룩업을 사용해 이 설명자가 기술하는 콜 사이트의 타깃으로 설정할 메서드 핸들을 찾아야 해요.

생성자

  • CallSiteDescriptor(MethodHandles.Lookup lookup, Operation operation, MethodType methodType) — 새 콜 사이트 설명자를 만듭니다. lookup은 콜 사이트가 속한 클래스를 기술하는 룩업 객체이고, java.lang.invoke 부트스트랩 메서드에서 만들 때는 부트스트랩에 전달된 룩업을 쓰면 돼요. operation은 콜 사이트의 동적 연산, methodType은 콜 사이트의 메서드 타입입니다.

주요 메서드

  • getOperation() — 콜 사이트의 연산을 반환합니다.
  • getMethodType() — 콜 사이트의 메서드 타입을 반환해요.
  • changeMethodType(MethodType) — 이 설명자에서 메서드 타입만 다른 콜 사이트 설명자를 찾거나 만들어 반환합니다. newMethodTypenull이면 NullPointerException이 발생해요.
  • changeOperation(Operation) — 연산만 다른 설명자를 찾거나 만듭니다.
  • equals(Object) / hashCode() — 연산, 메서드 타입, 룩업 객체의 룩업 클래스와 룩업 모드로부터 값 기반의 동등성과 해시 코드를 계산해요.
  • toString()name(parameterTypes)returnType@lookup 형식의 문자열을 반환합니다.

또한 SecureLookupSupplier에서 getLookup() 등 룩업 접근 메서드를 상속받습니다.

더 알아보기

Java 공식 API