ConstantDesc — 상수 명목 기술자

ConstantDesc — 상수 명목 기술자

ConstantDesc는 JVMS 4.4에 정의된 로드 가능한 상수 값(loadable constant value)에 대한 명목 기술자입니다. 이러한 기술자는 resolveConstantDesc(MethodHandles.Lookup)로 해석하여 상수 값 자체를 얻을 수 있습니다.

출처: Java API Reference

본문

명목 기술자의 클래스 이름은 클래스 파일 상수 풀의 클래스 이름과 마찬가지로 특정 클래스 로더의 관점에서 해석되어야 하며, 클래스 로더는 명목 기술자의 일부가 아닙니다.

public sealed interface ConstantDesc
    permits ClassDesc, MethodHandleDesc, MethodTypeDesc, Double,
            DynamicConstantDesc<T>, Float, Integer, Long, String

상수 풀에 고유하게 표현 가능한 정적 상수(String, Integer, Long, Float, Double)는 ConstantDesc를 구현해 자신의 명목 기술자 역할을 합니다. 고유하게 링크 가능한 상수(Class, MethodType, MethodHandle)는 ClassDesc, MethodTypeDesc, MethodHandleDesc라는 대응 ConstantDesc 타입을 가집니다. 그 외 상수는 DynamicConstantDesc의 하위 타입으로 표현됩니다.

바이트코드 생성이나 파싱을 수행하는 API는 ldc 명령의 피연산자, 동적 상수와 invokedynamic 명령의 정적 부트스트랩 인자, 그리고 상수 풀을 사용하는 기타 바이트코드·클래스 파일 구조를 설명하는 데 ConstantDesc를 사용하도록 권장됩니다.

메서드

Object resolveConstantDesc(MethodHandles.Lookup lookup) throws ReflectiveOperationException

ConstantDesc 구현은 불변이어야 하며 그 동작이 객체 정체성(identity)에 의존해서는 안 됩니다. 플랫폼이 아닌 클래스는 ConstantDesc를 직접 구현해서는 안 되며, 대신 DynamicConstantDesc를 확장해야 합니다. 명목 기술자는 Object.equals(Object) 메서드로 비교해야 합니다. 특정 엔티티가 항상 같은 기술자 인스턴스로 표현된다는 보장은 없습니다.

더 알아보기 (Learn more)