-
- All Superinterfaces:
ConstantDesc
,TypeDescriptor
,TypeDescriptor.OfField<ClassDesc>
public interface ClassDesc extends ConstantDesc, TypeDescriptor.OfField<ClassDesc>
A nominal descriptor for aClass
constant.For common system types, including all the primitive types, there are predefined ClassDesc constants in
ConstantDescs
. (Thejava.lang.constant
APIs considervoid
to be a primitive type.) To create a ClassDesc for a class or interface type, useof(java.lang.String)
orofDescriptor(String)
; to create a ClassDesc for an array type, useofDescriptor(String)
, or first obtain a ClassDesc for the component type and then call thearrayType()
orarrayType(int)
methods.- API Note:
- In the future, if the Java language permits, ClassDesc
may become a
sealed
interface, which would prohibit subclassing except by explicitly permitted types. Non-platform classes should not implement ClassDesc directly. - Since:
- 12
- See Also:
ConstantDescs
-
-
Nested Class Summary
-
Nested classes/interfaces declared in interface java.lang.invoke.TypeDescriptor
TypeDescriptor.OfField<F extends TypeDescriptor.OfField<F>>, TypeDescriptor.OfMethod<F extends TypeDescriptor.OfField<F>,M extends TypeDescriptor.OfMethod<F,M>>
-
-
Method Summary
Modifier and Type Method Description default ClassDesc
arrayType()
default ClassDesc
arrayType(int rank)
default ClassDesc
componentType()
Returns the component type of this ClassDesc, if it describes an array type, ornull
otherwise.String
descriptorString()
Returns a field type descriptor string for this typedefault String
displayName()
Returns a human-readable name for the type described by this descriptor.boolean
equals(Object o)
Compare the specified object with this descriptor for equality.default boolean
isArray()
Returns whether this ClassDesc describes an array type.default boolean
isClassOrInterface()
Returns whether this ClassDesc describes a class or interface type.default boolean
isPrimitive()
Returns whether this ClassDesc describes a primitive type.default ClassDesc
nested(String nestedName)
default ClassDesc
nested(String firstNestedName, String... moreNestedNames)
static ClassDesc
of(String name)
Returns a ClassDesc for a class or interface type, given the name of the class or interface, such as"java.lang.String"
.static ClassDesc
of(String packageName, String className)
Returns a ClassDesc for a class or interface type, given a package name and the unqualified (simple) name for the class or interface.static ClassDesc
ofDescriptor(String descriptor)
Returns a ClassDesc given a descriptor string for a class, interface, array, or primitive type.default String
packageName()
Returns the package name of this ClassDesc, if it describes a class or interface type.-
Methods declared in interface java.lang.constant.ConstantDesc
resolveConstantDesc
-
-
-
-
Method Detail
-
of
static ClassDesc of(String name)
Returns a ClassDesc for a class or interface type, given the name of the class or interface, such as"java.lang.String"
. (To create a descriptor for an array type, either useofDescriptor(String)
orarrayType()
; to create a descriptor for a primitive type, useofDescriptor(String)
or use the predefined constants inConstantDescs
).- Parameters:
name
- the fully qualified (dot-separated) binary class name- Returns:
- a ClassDesc describing the desired class
- Throws:
NullPointerException
- if any argument isnull
IllegalArgumentException
- if the name string is not in the correct format
-
of
static ClassDesc of(String packageName, String className)
Returns a ClassDesc for a class or interface type, given a package name and the unqualified (simple) name for the class or interface.- Parameters:
packageName
- the package name (dot-separated); if the package name is the empty string, the class is considered to be in the unnamed packageclassName
- the unqualified (simple) class name- Returns:
- a ClassDesc describing the desired class
- Throws:
NullPointerException
- if any argument isnull
IllegalArgumentException
- if the package name or class name are not in the correct format
-
ofDescriptor
static ClassDesc ofDescriptor(String descriptor)
Returns a ClassDesc given a descriptor string for a class, interface, array, or primitive type.- API Note:
- A field type descriptor string for a non-array type is either
a one-letter code corresponding to a primitive type
(
"J", "I", "C", "S", "B", "D", "F", "Z", "V"
), or the letter"L"
, followed by the fully qualified binary name of a class, followed by";"
. A field type descriptor for an array type is the character"["
followed by the field descriptor for the component type. Examples of valid type descriptor strings include"Ljava/lang/String;"
,"I"
,"[I"
,"V"
,"[Ljava/lang/String;"
, etc. See JVMS 4.3.2 ("Field Descriptors") for more detail. - Parameters:
descriptor
- a field descriptor string- Returns:
- a ClassDesc describing the desired class
- Throws:
NullPointerException
- if any argument isnull
IllegalArgumentException
- if the name string is not in the correct format- See The Java™ Virtual Machine Specification:
- 4.3.2 Field Descriptors, 4.4.1 The CONSTANT_Class_info Structure
-
arrayType
default ClassDesc arrayType()
- Specified by:
arrayType
in interfaceTypeDescriptor.OfField<ClassDesc>
- Returns:
- a ClassDesc describing the array type
- Throws:
IllegalStateException
- if the resulting ClassDesc would have an array rank of greater than 255- See The Java™ Virtual Machine Specification:
- 4.4.1 The CONSTANT_Class_info Structure
-
arrayType
default ClassDesc arrayType(int rank)
Returns a ClassDesc for an array type of the specified rank, whose component type is described by this ClassDesc.- Parameters:
rank
- the rank of the array- Returns:
- a ClassDesc describing the array type
- Throws:
IllegalArgumentException
- if the rank is less than zero or if the rank of the resulting array type is greater than 255- See The Java™ Virtual Machine Specification:
- 4.4.1 The CONSTANT_Class_info Structure
-
nested
default ClassDesc nested(String nestedName)
- API Note:
- Example: If descriptor
d
describes the classjava.util.Map
, a descriptor for the classjava.util.Map.Entry
could be obtained byd.nested("Entry")
. - Parameters:
nestedName
- the unqualified name of the nested class- Returns:
- a ClassDesc describing the nested class
- Throws:
NullPointerException
- if any argument isnull
IllegalStateException
- if this ClassDesc does not describe a class or interface typeIllegalArgumentException
- if the nested class name is invalid
-
nested
default ClassDesc nested(String firstNestedName, String... moreNestedNames)
- Parameters:
firstNestedName
- the unqualified name of the first level of nested classmoreNestedNames
- the unqualified name(s) of the remaining levels of nested class- Returns:
- a ClassDesc describing the nested class
- Throws:
NullPointerException
- if any argument isnull
IllegalStateException
- if this ClassDesc does not describe a class or interface typeIllegalArgumentException
- if the nested class name is invalid
-
isArray
default boolean isArray()
Returns whether this ClassDesc describes an array type.- Specified by:
isArray
in interfaceTypeDescriptor.OfField<ClassDesc>
- Returns:
- whether this ClassDesc describes an array type
-
isPrimitive
default boolean isPrimitive()
Returns whether this ClassDesc describes a primitive type.- Specified by:
isPrimitive
in interfaceTypeDescriptor.OfField<ClassDesc>
- Returns:
- whether this ClassDesc describes a primitive type
-
isClassOrInterface
default boolean isClassOrInterface()
Returns whether this ClassDesc describes a class or interface type.- Returns:
- whether this ClassDesc describes a class or interface type
-
componentType
default ClassDesc componentType()
Returns the component type of this ClassDesc, if it describes an array type, ornull
otherwise.- Specified by:
componentType
in interfaceTypeDescriptor.OfField<ClassDesc>
- Returns:
- a ClassDesc describing the component type, or
null
if this descriptor does not describe an array type
-
packageName
default String packageName()
Returns the package name of this ClassDesc, if it describes a class or interface type.- Returns:
- the package name, or the empty string if the class is in the default package, or this ClassDesc does not describe a class or interface type
-
displayName
default String displayName()
Returns a human-readable name for the type described by this descriptor.- Implementation Requirements:
The default implementation returns the simple name (e.g.,
int
) for primitive types, the unqualified class name for class or interface types, or the display name of the component type suffixed with the appropriate number of[]
pairs for array types.- Returns:
- the human-readable name
-
descriptorString
String descriptorString()
Returns a field type descriptor string for this type- Specified by:
descriptorString
in interfaceTypeDescriptor
- Returns:
- the descriptor string
- See The Java™ Virtual Machine Specification:
- 4.3.2 Field Descriptors
-
equals
boolean equals(Object o)
Compare the specified object with this descriptor for equality. Returnstrue
if and only if the specified object is also a ClassDesc and both describe the same type.- Overrides:
equals
in classObject
- Parameters:
o
- the other object- Returns:
- whether this descriptor is equal to the other object
- See Also:
Object.hashCode()
,HashMap
-
-