当前位置: 首页 > 面试题库 >

什么是类描述符?

叶稳
2023-03-14
问题内容

什么是类描述符?

它是Class特定类的对象吗?


问题答案:

是的,Class对象是某个“类”的类描述符。

从API中:

此类的实例表示正在运行的Java应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组还属于一个反映为Class对象的类,该类对象由元素类型和维数相同的所有数组共享。原始Java类型(布尔型,字节型,字符型,短型,整型,长型,浮点型和双精度型)以及关键字void也都表示为Class对象。

这是一个简单使用Class方法来示例性地描述类型的示例:

static void describe(Class<?> clazz, String pad, String leadin) {
    if (clazz == null) return;
    String type =
        clazz.isInterface() ? "interface" :
        clazz.isArray() ? "array" :
        clazz.isPrimitive() ? "primitive" :
        clazz.isEnum() ? "enum" :
        "class";
    System.out.printf("%s%s%s %s ( %s )%n",
        pad, leadin, type, clazz.getSimpleName(), clazz.getName());
    for (Class<?> interfaze : clazz.getInterfaces()) {
        describe(interfaze, pad + "   ", "implements ");
    }
    describe(clazz.getComponentType(), pad + "   ", "elements are ");
    describe(clazz.getSuperclass(), pad + "   ", "extends ");
}
static void describe(Class<?> clazz) {
    describe(clazz, "", "");
    System.out.println();
}
public static void main(String[] args) {
    describe(boolean[][].class);
    describe(java.math.RoundingMode.class);
    describe(java.util.ArrayList.class);
    describe(void.class);
}

上面的代码片段产生以下输出:

array boolean[][] ( [[Z )
   implements interface Cloneable ( java.lang.Cloneable )
   implements interface Serializable ( java.io.Serializable )
   elements are array boolean[] ( [Z )
      implements interface Cloneable ( java.lang.Cloneable )
      implements interface Serializable ( java.io.Serializable )
      elements are primitive boolean ( boolean )
      extends class Object ( java.lang.Object )
   extends class Object ( java.lang.Object )

enum RoundingMode ( java.math.RoundingMode )
   extends class Enum ( java.lang.Enum )
      implements interface Comparable ( java.lang.Comparable )
      implements interface Serializable ( java.io.Serializable )
      extends class Object ( java.lang.Object )

class ArrayList ( java.util.ArrayList )
   implements interface List ( java.util.List )
      implements interface Collection ( java.util.Collection )
         implements interface Iterable ( java.lang.Iterable )
   implements interface RandomAccess ( java.util.RandomAccess )
   implements interface Cloneable ( java.lang.Cloneable )
   implements interface Serializable ( java.io.Serializable )
   extends class AbstractList ( java.util.AbstractList )
      implements interface List ( java.util.List )
         implements interface Collection ( java.util.Collection )
            implements interface Iterable ( java.lang.Iterable )
      extends class AbstractCollection ( java.util.AbstractCollection )
         implements interface Collection ( java.util.Collection )
            implements interface Iterable ( java.lang.Iterable )
         extends class Object ( java.lang.Object )

primitive void ( void )

API链接

  • Class.getName()
    • 解释数组和基元的“ funky”名称

参考文献

  • Java教程/反射API
    • 另请参阅: 有效的Java 2nd Edition,第53项:首选接口而不是反射
  • JLS 15.8.2类文字


 类似资料:
  • Python 中,通过使用描述符,可以让程序员在引用一个对象属性时自定义要完成的工作。 本质上看,描述符就是一个类,只不过它定义了另一个类中属性的访问方式。换句话说,一个类可以将属性管理全权委托给描述符类。 描述符是 Python 中复杂属性访问的基础,它在内部被用于实现 property、方法、类方法、静态方法和 super 类型。 描述符类基于以下 3 个特殊方法,换句话说,这 3 个方法组成

  • 本文向大家介绍Windows Powershell属性:描述对象是什么,包括了Windows Powershell属性:描述对象是什么的使用技巧和注意事项,需要的朋友参考一下 属性可以描述一个对象,对象的属性可以被Powershell自动转换成文本,并且输出到控制台。因此可以通过这种方法查看任何对象,例如$host: InternalHost对象存储在$host变量中,包含9个属性。输出的第一列为

  • 但我想重写此行为,以便打印到控制台: 是否有方法清理此输出?我看过协议: 我认为会自动“看到”这一点,但情况似乎并非如此:

  • 本文向大家介绍请描述下vue的生命周期是什么?相关面试题,主要包含被问及请描述下vue的生命周期是什么?时的应答技巧和注意事项,需要的朋友参考一下 生命周期就是vue从开始创建到销毁的过程,分为四大步(创建,挂载,更新,销毁),每一步又分为两小步,如beforeCreate,created。beforeCreate前,也就是new Vue的时候会初始化事件和生命周期;beforeCreate和cr

  • 描述符的定义: https://python-reference.readthedocs.io/en/latest/docs/dunder... In general, a descriptor is an object attribute with “binding behavior”, one whose attribute access has been overridden by meth

  • 我正在尝试使用groovy脚本将值插入请求并捕获来自soapui-pro Testsuite/testcase/testStep的响应,而不使用soapui-pro向导创建任何属性或断言。我想用Soapui pro中的groovy脚本文件做的一切。但经过11天的自我学习过程,我不得不在论坛上问: 我浏览了近 100 个网站,讨论如何捕获请求/响应价值。但没有一个解释以下内容: getXmlHold