ConstantCallSite — 타깃을 바꿀 수 없는 콜 사이트

ConstantCallSite — 타깃을 바꿀 수 없는 콜 사이트

ConstantCallSite는 타깃이 영구적이고 절대 변경될 수 없는 CallSite예요. ConstantCallSite에 연결된 invokedynamic 명령어는 콜 사이트의 타깃에 영구적으로 묶여요.

출처: Java API Reference

본문

변경 가능한 타깃이 필요 없다면 콜 사이트를 상수로 만들어 버리는 게 가장 간단하고 성능도 좋아요. Ry 계열에서 타깃을 아예 바꾸지 않을 것이 확실한 경우에 이 클래스를 써요.

상속 구조는 다음과 같아요.

java.lang.Object
  java.lang.invoke.CallSite
    java.lang.invoke.ConstantCallSite

생성자

  • ConstantCallSite(MethodHandle target) — 영구 타깃으로 콜 사이트를 만들어요. target이 null이면 NullPointerException을 던져요.
  • protected ConstantCallSite(MethodType targetType, MethodHandle createTargetHook) throws Throwable — 영구 타깃으로, 콜 사이트 자체에 묶일 수 있는 콜 사이트를 만들어요. 생성 중 createTargetHook.invoke(this) 형태로 훅이 호출돼 실제 타깃을 생성해요. 사용자 코드는 ConstantCallSite 생성자가 반환되기 전에 타깃이 고정돼야 하므로 하위 클래스 생성자에서 직접 이런 동작을 할 수 없어요. 전형적인 동작은 someTarget.bindTo(this)지만, 훅은 콜 사이트를 무시하고 상수 타깃을 반환하는 등 어떤 동작이든 할 수 있어요.

메서드

  • final MethodHandle dynamicInvoker() — 이 콜 사이트의 영구 타깃을 반환해요.
  • final MethodHandle getTarget() — 콜 사이트의 타깃 메서드를 반환해요. ConstantCallSite의 final 필드처럼 동작해요.
  • final void setTarget(MethodHandle ignore) — 항상 UnsupportedOperationException을 던져요. 상수 콜 사이트의 타깃은 바꿀 수 없으니까요.

더 알아보기 (Learn more)