前言
- 本文原创作者为 Blume,版权归原创作者所有。
- 本文主要内容根据 Java API 官方文档中的《ClassDesc》编写而成。
- 本文更新(修订)于 2021 年 3 月 23 日。
- 本文网址为
https://blog.csdn.net/weixin_48390834/article/details/114952033
- 商业性转载请联系原创作者,非商业性转载请注明出处。
定义
ClassDesc 接口,在 Java 中用来表示一个对类、接口、数组或原初类型进行描述的标称描述符。ClassDesc 接口位于 java.base 模块中的 java.lang.constant 包中。
-
所有父接口:
ConstantDesc,TypeDescriptor,TypeDescriptor.OfField<ClassDesc> -
声明:
public interface ClassDesc extends ConstantDesc, TypeDescriptor.OfField<ClassDesc>
概述
在 ConstantDescs 类中,已预定义了公共系统类型(包括所有原初类型)的 ClassDesc 常量。
- 在 java.lang.constant 包中的 API,将 void 视为原初类型。
- 原初类型(Primitive Type),又称“原始类型”、“内置类型”、“简单类型”、“基元类型”、“基础类型”、“基本类型”等。
- 请参阅 ConstantDescs 类。
如需为类或接口类型创建 ClassDesc 对象,请使用 of(String) 方法、of(String, String) 方法或 ofDescriptor(String) 方法。
如需为原初类型创建 ClassDesc 对象,请使用 ofDescriptor(String) 方法。
如需为数组类型创建 ClassDesc 对象,请使用 ofDescriptor(String) 方法;或先获取组件类型的 ClassDesc 对象,再调用 arrayType() 方法或 arrayType(int) 方法。
API 注释
Java 语言可能在未来允许将 ClassDesc 接口改成一个封闭接口,除了显式允许的类型外,它将禁止子类化。非平台类不应直接实现 ClassDesc 接口。
起始版本
自 Java SE 12 起,提供本接口。
方法摘要
修饰符及类型 | 方法 | 描述 |
---|---|---|
default ClassDesc | arrayType() | 返回一个数组类型的 ClassDesc 对象,该数组类型的组件类型由返回的 ClassDesc 对象进行描述。 |
Default ClassDesc | arrayType(int rank) | 返回一个指定维数的数组类型的 ClassDesc 对象,该数组类型的组件类型由返回的 ClassDesc 对象进行描述。 |
Default ClassDesc | componentType() | 若当前的 ClassDesc 对象描述的是数组类型,则返回它的组件类型;否则返回 null。 |
String | descriptorString() | 返回当前 ClassDesc 对象所描述的类型的描述符字符串。 |
Default String | displayName() | 返回当前 ClassDesc 对象所描述的类型的易读懂的名称。 |
Boolean | equals(Object o) | 比较当前的 ClassDesc 对象与指定的对象是否相等(相同)。 |
Default boolean | isArray() | 确定当前的 ClassDesc 对象是否描述一个数组类型。 |
Default boolean | isClassOrInterface() | 确定当前的 ClassDesc 对象是否描述一个类或接口类型。 |
Default boolean | isPrimitive() | 确定当前的 ClassDesc 对象是否描述一个原初类型。 |
Default ClassDesc | nested(String nestedName) | 返回当前 ClassDesc 对象所描述的类或接口类型的指定嵌套类的 ClassDesc 对象。 |
Default ClassDesc | nested(String firstNestedName, String… moreNestedNames) | 返回当前 ClassDesc 对象所描述的类或接口类型的指定嵌套类的 ClassDesc 对象。 |
Static ClassDesc | of(String name) | 返回为类或接口类型指定名称的 ClassDesc 对象。 |
Static ClassDesc | of(String packageName, String className) | 返回为类或接口类型指定包名和类名的 ClassDesc 对象。 |
Static ClassDesc | ofDescriptor(String descriptor) | 返回为类、接口、数组或原初类型指定描述符字符串的 ClassDesc 对象。 |
Default String | packageName() | 若当前的 ClassDesc 对象描述的是类或接口类型,则返回它的包名;否则返回空字符串。 |
方法详述
arrayType()
-
声明:
default ClassDesc arrayType() -
描述:
返回一个数组类型的 ClassDesc 对象,该数组类型的组件类型由返回的 ClassDesc 对象进行描述。 -
返回:
返回一个描述数组类型的 ClassDesc 对象。 -
异常:
若返回时所描述的数组维数大于 255,则将导致抛出 IllegalStateException(非法状态异常)。 -
请参阅:
arrayType(int) 方法,componentType() 方法;
TypeDescriptor.OfField.arrayType() 方法,Class.arrayType() 方法。 -
示例:
请参阅 arrayType(int) 示例。
arrayType(int)
-
声明:
default ClassDesc arrayType(int rank) -
描述:
返回一个指定维数的数组类型的 ClassDesc 对象,该数组类型的组件类型由返回的 ClassDesc 对象进行描述。 -
参数:
rank - 表示数组的维数。 -
返回:
返回一个描述数组类型的 ClassDesc 对象。 -
异常:
若返回时所描述的数组维数大于 255,则将导致抛出 IllegalStateException(非法状态异常)。
import java.lang.constant.ClassDesc;
import java.lang.constant.ConstantDescs;
/**
* arrayType(int) 示例
*
* @author Blume
*/
public class arrayType_demo {
public static void main(String[] args) {
// 创建 ClassDesc 对象,它描述的是 int 原初类型的一维数组类型。
ClassDesc cd = ConstantDescs.CD_int.arrayType();
System.out.println("cd 所描述的是:".concat(cd.displayName()));
System.out.println("cd 的组件类型:".concat(cd.componentType().displayName()));
// 创建 ClassDesc 对象,它将 cd 的二维数组类型描述为 int 原初类型的三维数组类型。
int rank = 2;
ClassDesc demo = cd.arrayType(rank);
System.out.println("\r\ndemo 所描述的是:".