一个名义描述符,用于表示一个
Class常量。
对于常见的系统类型,包括所有原始类型,ClassDesc在ConstantDescs中有预定义的常量。(在java.lang.constant API中,将void视为原始类型。)要为类或接口类型创建一个ClassDesc,请使用of(java.lang.String)或ofDescriptor(String);要为数组类型创建一个ClassDesc,请使用ofDescriptor(String),或先获取组件类型的ClassDesc,然后调用arrayType()或arrayType(int)方法。
- 自 JDK 版本:
- 12
- 参见:
-
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 TypeMethodDescriptiondefault ClassDescdefault ClassDescarrayType(int rank) default ClassDesc如果描述的是数组类型,则返回此ClassDesc的组件类型;否则返回null。返回此类型的字段类型描述符字符串default String返回此描述符描述的类型的人类可读名称。boolean将指定对象与此描述符进行比较以判断是否相等。default booleanisArray()返回此ClassDesc是否描述一个数组类型。default boolean返回此ClassDesc是否描述一个类或接口类型。default boolean返回此ClassDesc是否描述一个原始类型。default ClassDescdefault ClassDescstatic ClassDesc返回一个给定类或接口名称的ClassDesc,例如"java.lang.String"。static ClassDesc返回一个给定包名和类或接口的未限定(简单)名称的ClassDesc。static ClassDescofDescriptor(String descriptor) 给定一个类、接口、数组或原始类型的描述符字符串,返回一个ClassDesc。static ClassDescofInternalName(String name) 返回此ClassDesc的包名,如果描述的是类或接口类型。default StringClass<?> 返回一个给定类或接口名称的ClassDesc,例如"java.lang.String"。(要为数组类型创建一个描述符,可以使用ofDescriptor(String)或arrayType();要为原始类型创建一个描述符,可以使用ofDescriptor(String)或使用ConstantDescs中的预定义常量。)
-
Method Details
-
of
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).- 参数:
-
name- 完全限定(点分隔)的二进制类名 - 返回:
- 描述所需类的ClassDesc
- 抛出:
-
NullPointerException- 如果参数为null -
IllegalArgumentException- 如果名称字符串格式不正确 - 参见:
-
ofInternalName
返回一个给定类或接口名称的ClassDesc,例如"java/lang/String"的内部形式。- API 注释:
-
要为数组类型创建一个描述符,可以使用
ofDescriptor(String)或arrayType();要为原始类型创建一个描述符,可以使用ofDescriptor(String)或使用ConstantDescs中的预定义常量。 - 参数:
-
name- 完全限定类名,以内部(斜杠分隔)形式表示 - 返回:
- 描述所需类的ClassDesc
- 抛出:
-
NullPointerException- 如果参数为null -
IllegalArgumentException- 如果包名或类名的字符串格式不正确 - 参见Java虚拟机规范:
-
4.2.1 二进制类和接口名称
- 自 JDK 版本:
- 20
- 参见:
-
of
返回一个给定包名和类或接口的未限定(简单)名称的ClassDesc。- 参数:
-
packageName- 包名(点分隔);如果包名为空字符串,则认为该类位于未命名包中 -
className- 未限定(简单)类名 - 返回:
- 描述所需类的ClassDesc
- 抛出:
-
NullPointerException- 如果任何参数为null -
IllegalArgumentException- 如果包名或类名的格式不正确
-
ofDescriptor
给定一个类、接口、数组或原始类型的描述符字符串,返回一个ClassDesc。- API 注释:
-
针对非数组类型的字段类型描述符字符串可以是一个对应于原始类型的单个字母代码(
"J", "I", "C", "S", "B", "D", "F", "Z", "V"),或者是字母"L",后跟类的完全限定二进制名称,后跟";"。数组类型的字段类型描述符是字符"[",后跟组件类型的字段描述符。有效类型描述符字符串的示例包括"Ljava/lang/String;","I","[I","V","[Ljava/lang/String;"等。有关更多详细信息,请参见JVMS 4.3.2 ("字段描述符")。 - 参数:
-
descriptor- 字段描述符字符串 - 返回:
- 描述所需类的ClassDesc
- 抛出:
-
NullPointerException- 如果参数为null -
IllegalArgumentException- 如果描述符字符串格式不正确 - 参见Java虚拟机规范:
-
4.3.2 字段描述符
4.4.1 CONSTANT_Class_info 结构
- 另请参阅:
-
arrayType
- 指定者:
-
arrayType在接口TypeDescriptor.OfField<ClassDesc> - 返回:
- 描述数组类型的ClassDesc
- 抛出:
-
IllegalStateException- 如果结果的ClassDesc的数组级别大于255 - 参见Java虚拟机规范:
-
4.4.1 CONSTANT_Class_info 结构
-
arrayType
- 参数:
-
rank- 数组的级别 - 返回:
- 描述数组类型的ClassDesc
- 抛出:
-
IllegalArgumentException- 如果级别小于或等于零,或者结果数组类型的级别大于255 - 参见Java虚拟机规范:
-
4.4.1 CONSTANT_Class_info 结构
-
nested
- API 注释:
-
示例:如果描述符
d描述类java.util.Map,则可以通过d.nested("Entry")获得类java.util.Map.Entry的描述符。 - 参数:
-
nestedName- 嵌套类的未限定名称 - 返回:
- 描述嵌套类的ClassDesc
- 抛出:
-
NullPointerException- 如果参数为null -
IllegalStateException- 如果此ClassDesc不描述类或接口类型 -
IllegalArgumentException- 如果嵌套类名称无效
-
nested
- 参数:
-
firstNestedName- 第一级嵌套类的未限定名称 -
moreNestedNames- 剩余级别的嵌套类的未限定名称 - 返回:
- 描述嵌套类的ClassDesc
- 抛出:
-
NullPointerException- 如果任何参数或其内容为null -
IllegalStateException- 如果此ClassDesc不描述类或接口类型 -
IllegalArgumentException- 如果嵌套类名称无效
-
isArray
default boolean isArray()返回此ClassDesc是否描述数组类型。- 指定者:
-
isArray在接口TypeDescriptor.OfField<ClassDesc> - 返回:
- 此ClassDesc是否描述数组类型
-
isPrimitive
default boolean isPrimitive()返回此ClassDesc是否描述原始类型。- 指定者:
-
isPrimitive在接口TypeDescriptor.OfField<ClassDesc> - 返回:
- 此ClassDesc是否描述原始类型
-
isClassOrInterface
default boolean isClassOrInterface()返回此ClassDesc是否描述类或接口类型。- 返回:
- 此ClassDesc是否描述类或接口类型
-
componentType
返回此ClassDesc的组件类型,如果描述数组类型,则返回null。- 指定者:
-
componentType在接口TypeDescriptor.OfField<ClassDesc> - 返回:
-
描述组件类型的ClassDesc,如果此描述符不描述数组类型,则返回
null
-
packageName
返回此ClassDesc的包名,如果描述类或接口类型。- 返回:
- 包名,如果类在默认包中则为空字符串,或者此ClassDesc不描述类或接口类型
-
displayName
返回由此描述符描述的类型的人类可读名称。- 实现要求:
-
默认实现返回原始类型的简单名称(例如,
int),类或接口类型的未限定类名,或者数组类型的显示名称,后跟适当数量的[]对。 - 返回:
- 人类可读名称
-
descriptorString
String descriptorString()返回此类型的字段类型描述符字符串。- 指定者:
-
descriptorString在接口TypeDescriptor - 返回:
- 描述符字符串
- 参见Java虚拟机规范:
-
4.3.2 字段描述符
-
resolveConstantDesc
从接口复制的描述:ConstantDesc- 指定者:
-
resolveConstantDesc在接口ConstantDesc - 参数:
-
lookup- 提供名称解析和访问控制上下文的MethodHandles.Lookup - 返回:
- 已解析的常量值
- 抛出:
-
ReflectiveOperationException- 如果在解析过程中无法反射解析类、方法或字段
-
equals
将指定对象与此描述符进行比较以确定是否相等。仅当指定对象也是 ClassDesc 并且两者描述相同类型时返回true。
-