Class DynamicConstantDesc<T>
- Type Parameters:
-
T
- the type of the dynamic constant
- All Implemented Interfaces:
ConstantDesc
- Direct Known Subclasses:
-
Enum.EnumDesc
,VarHandle.VarHandleDesc
public abstract non-sealed class DynamicConstantDesc<T> extends Object implements ConstantDesc
Constant_Dynamic_info
.) Concrete subtypes of DynamicConstantDesc should be immutable and their behavior should not rely on object identity.
- Since:
- 12
Constructor Summary
Modifier | Constructor | Description |
---|---|---|
protected |
Creates a nominal descriptor for a dynamic constant. |
Method Summary
Modifier and Type | Method | Description |
---|---|---|
ConstantDesc[] |
bootstrapArgs() |
Returns the bootstrap arguments for this constant. |
List<ConstantDesc> |
bootstrapArgsList() |
Returns the bootstrap arguments for this constant as an immutable List . |
DirectMethodHandleDesc |
bootstrapMethod() |
Returns a MethodHandleDesc describing the bootstrap method for this constant. |
String |
constantName() |
Returns the name that would appear in the NameAndType operand of the LDC for this constant. |
ClassDesc |
constantType() |
Returns a ClassDesc describing the type that would appear in the NameAndType operand of the LDC for this constant. |
final boolean |
equals |
Compares the specified object with this descriptor for equality. |
final int |
hashCode() |
Returns a hash code value for the object. |
static <T> DynamicConstantDesc<T> |
of |
Returns a nominal descriptor for a dynamic constant whose bootstrap has no static arguments, whose name parameter is ConstantDescs.DEFAULT_NAME , and whose type parameter is always the same as the bootstrap method return type. |
static <T> DynamicConstantDesc<T> |
of |
Returns a nominal descriptor for a dynamic constant whose name parameter is ConstantDescs.DEFAULT_NAME , and whose type parameter is always the same as the bootstrap method return type. |
static <T> ConstantDesc |
ofCanonical |
Returns a nominal descriptor for a dynamic constant, transforming it into a more specific type if the constant bootstrap is a well-known one and a more specific nominal descriptor type (e.g., ClassDesc) is available. |
static <T> DynamicConstantDesc<T> |
ofNamed |
Returns a nominal descriptor for a dynamic constant. |
T |
resolveConstantDesc |
Resolves this descriptor reflectively, emulating the resolution behavior of JVMS 5.4.3 and the access control behavior of JVMS 5.4.4. |
String |
toString() |
Returns a compact textual description of this constant description, including the bootstrap method, the constant name and type, and the static bootstrap arguments. |
Constructor Details
DynamicConstantDesc
protected DynamicConstantDesc(DirectMethodHandleDesc bootstrapMethod, String constantName, ClassDesc constantType, ConstantDesc... bootstrapArgs)
- Parameters:
-
bootstrapMethod
- aDirectMethodHandleDesc
describing the bootstrap method for the constant -
constantName
- The unqualified name that would appear in theNameAndType
operand of theLDC
for this constant -
constantType
- aClassDesc
describing the type that would appear in theNameAndType
operand of theLDC
for this constant -
bootstrapArgs
-ConstantDesc
s describing the static arguments to the bootstrap, that would appear in theBootstrapMethods
attribute - Throws:
-
NullPointerException
- if any argument is null -
IllegalArgumentException
- if thename
has the incorrect format - See Java Virtual Machine Specification:
- 4.2.2 Unqualified Names
Method Details
ofCanonical
public static <T> ConstantDesc ofCanonical(DirectMethodHandleDesc bootstrapMethod, String constantName, ClassDesc constantType, ConstantDesc[] bootstrapArgs)
Classes whose Constable.describeConstable()
method produce a DynamicConstantDesc with a well-known bootstrap including Class
(for instances describing primitive types), Enum
, and VarHandle
.
Bytecode-reading APIs that process the constant pool and wish to expose entries as ConstantDesc
to their callers should generally use this method in preference to ofNamed(DirectMethodHandleDesc, String, ClassDesc, ConstantDesc...)
because this may result in a more specific type that can be provided to callers.
- Type Parameters:
-
T
- the type of the dynamic constant - Parameters:
-
bootstrapMethod
- aDirectMethodHandleDesc
describing the bootstrap method for the constant -
constantName
- The unqualified name that would appear in theNameAndType
operand of theLDC
for this constant -
constantType
- aClassDesc
describing the type that would appear in theNameAndType
operand of theLDC
for this constant -
bootstrapArgs
-ConstantDesc
s describing the static arguments to the bootstrap, that would appear in theBootstrapMethods
attribute - Returns:
- the nominal descriptor
- Throws:
-
NullPointerException
- if any argument is null -
IllegalArgumentException
- if thename
has the incorrect format - See Java Virtual Machine Specification:
- 4.2.2 Unqualified Names
ofNamed
public static <T> DynamicConstantDesc<T> ofNamed(DirectMethodHandleDesc bootstrapMethod, String constantName, ClassDesc constantType, ConstantDesc... bootstrapArgs)
- Type Parameters:
-
T
- the type of the dynamic constant - Parameters:
-
bootstrapMethod
- aDirectMethodHandleDesc
describing the bootstrap method for the constant -
constantName
- The unqualified name that would appear in theNameAndType
operand of theLDC
for this constant -
constantType
- aClassDesc
describing the type that would appear in theNameAndType
operand of theLDC
for this constant -
bootstrapArgs
-ConstantDesc
s describing the static arguments to the bootstrap, that would appear in theBootstrapMethods
attribute - Returns:
- the nominal descriptor
- Throws:
-
NullPointerException
- if any argument is null -
IllegalArgumentException
- if thename
has the incorrect format - See Java Virtual Machine Specification:
- 4.2.2 Unqualified Names
of
public static <T> DynamicConstantDesc<T> of(DirectMethodHandleDesc bootstrapMethod, ConstantDesc... bootstrapArgs)
ConstantDescs.DEFAULT_NAME
, and whose type parameter is always the same as the bootstrap method return type.- Type Parameters:
-
T
- the type of the dynamic constant - Parameters:
-
bootstrapMethod
- aDirectMethodHandleDesc
describing the bootstrap method for the constant -
bootstrapArgs
-ConstantDesc
s describing the static arguments to the bootstrap, that would appear in theBootstrapMethods
attribute - Returns:
- the nominal descriptor
- Throws:
-
NullPointerException
- if any argument is null - See Java Virtual Machine Specification:
- 4.2.2 Unqualified Names
of
public static <T> DynamicConstantDesc<T> of(DirectMethodHandleDesc bootstrapMethod)
ConstantDescs.DEFAULT_NAME
, and whose type parameter is always the same as the bootstrap method return type.- Type Parameters:
-
T
- the type of the dynamic constant - Parameters:
-
bootstrapMethod
- aDirectMethodHandleDesc
describing the bootstrap method for the constant - Returns:
- the nominal descriptor
- Throws:
-
NullPointerException
- if any argument is null
constantName
public String constantName()
NameAndType
operand of the LDC
for this constant.- Returns:
- the constant name
constantType
public ClassDesc constantType()
ClassDesc
describing the type that would appear in the NameAndType
operand of the LDC
for this constant.- Returns:
- the constant type
bootstrapMethod
public DirectMethodHandleDesc bootstrapMethod()
MethodHandleDesc
describing the bootstrap method for this constant.- Returns:
- the bootstrap method
bootstrapArgs
public ConstantDesc[] bootstrapArgs()
- Returns:
- the bootstrap arguments
bootstrapArgsList
public List<ConstantDesc> bootstrapArgsList()
List
.- Returns:
- a
List
of the bootstrap arguments
resolveConstantDesc
public T resolveConstantDesc(MethodHandles.Lookup lookup) throws ReflectiveOperationException
ConstantDesc
MethodHandles.Lookup
parameter. No caching of the resulting value is performed.- Specified by:
-
resolveConstantDesc
in interfaceConstantDesc
- Parameters:
-
lookup
- TheMethodHandles.Lookup
to provide name resolution and access control context - Returns:
- the resolved constant value
- Throws:
-
ReflectiveOperationException
- if a class, method, or field could not be reflectively resolved in the course of resolution
equals
public final boolean equals(Object o)
true
if and only if the specified object is also a DynamicConstantDesc, and both descriptors have equal bootstrap methods, bootstrap argument lists, constant name, and constant type.hashCode
public final int hashCode()
Object
HashMap
. The general contract of hashCode
is:
- Whenever it is invoked on the same object more than once during an execution of a Java application, the
hashCode
method must consistently return the same integer, provided no information used inequals
comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application. - If two objects are equal according to the
equals
method, then calling thehashCode
method on each of the two objects must produce the same integer result. - It is not required that if two objects are unequal according to the
equals
method, then calling thehashCode
method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.
toString
public String toString()
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/constant/DynamicConstantDesc.html