CallSiteDescriptor
CallSiteDescriptor (콜 사이트 설명자)
콜 사이트를 연결하는 데 필요한 모든 정보를 담는 불변 클래스입니다. 이 정보는 보통 부트스트랩 메서드에 매개변수로 전달되며, 콜 사이트가 위치한 호출자 클래스의 MethodHandles.Lookup 객체, 콜 사이트의 동적 연산, 그리고 콜 사이트의 메서드 타입으로 구성돼요. Dynalink에서 DynamicLinker가 이후 사용하기 위해 이 매개변수들을 담아 저장하는 객체입니다.
본문
내장 RelinkableCallSite 구현들의 생성자는 모두 콜 사이트 설명자를 받습니다. 이 클래스는 반드시 불변(immutable)이어야 해요. 그대로 쓰거나, 특히 설명자에 추가 정보(주로 부트스트랩 메서드의 추가 매개변수로 전달된 값들)가 필요할 때 하위 클래스를 만들 수도 있습니다. 불변이어야 하므로 동등한 설명자끼리는 캐시를 만들어 콜 사이트들이 공유하게 할 수 있어요.
이 클래스는 SecureLookupSupplier를 상속해, 자신이 지닌 MethodHandles.Lookup 객체에 보안 검사된 접근을 제공합니다. 이 룩업을 사용해 이 설명자가 기술하는 콜 사이트의 타깃으로 설정할 메서드 핸들을 찾아야 해요.
생성자
CallSiteDescriptor(MethodHandles.Lookup lookup, Operation operation, MethodType methodType)— 새 콜 사이트 설명자를 만듭니다.lookup은 콜 사이트가 속한 클래스를 기술하는 룩업 객체이고,java.lang.invoke부트스트랩 메서드에서 만들 때는 부트스트랩에 전달된 룩업을 쓰면 돼요.operation은 콜 사이트의 동적 연산,methodType은 콜 사이트의 메서드 타입입니다.
주요 메서드
getOperation()— 콜 사이트의 연산을 반환합니다.getMethodType()— 콜 사이트의 메서드 타입을 반환해요.changeMethodType(MethodType)— 이 설명자에서 메서드 타입만 다른 콜 사이트 설명자를 찾거나 만들어 반환합니다.newMethodType이null이면NullPointerException이 발생해요.changeOperation(Operation)— 연산만 다른 설명자를 찾거나 만듭니다.equals(Object)/hashCode()— 연산, 메서드 타입, 룩업 객체의 룩업 클래스와 룩업 모드로부터 값 기반의 동등성과 해시 코드를 계산해요.toString()—name(parameterTypes)returnType@lookup형식의 문자열을 반환합니다.
또한 SecureLookupSupplier에서 getLookup() 등 룩업 접근 메서드를 상속받습니다.