Java 实现 - 元类

2022-09-03 12:56:44

我的理解是,Java对象模型是3个级别,每个级别描述它下面的级别,因此所有类(它们本身就是对象?)共享一个Meta类。

我的问题是 - 如何在Java中实现构造函数?(或任何其他类方法)我的逻辑说构造函数应该出现在Meta类中,但是由于只有一个Meta类,因此它保留所有可能的构造函数没有任何意义,或者我对此的理解是错误的。


答案 1

在Java中,只有一个元类:类的实例用于表示类和接口的类型。构造函数是在类级别定义的,而不是在元类级别定义的。Class


答案 2

你的问题对构造函数没有什么特别的:从在metavel上描述类的角度来看,构造函数,“正规方法”和字段的概念是相同的。

所以可以这样想:

  • Java中的每个类由一组特定的信息来描述:

    • 类的名称
    • 超类
    • 实现的接口
    • 构造函数及其签名的列表
    • (静态和非静态)方法及其签名的列表
    • (静态和非静态)字段及其类型的列表
  • 为方便起见,此信息在运行时可供您使用 - 这是“反射 API”。

  • 由于 JVM 装入的每个类都提供相同类型的信息,因此将其捆绑在一个名为 的自己的类中。java.lang.Class

  • 所以类的一个实例描述类,另一个实例描述。Classjava.lang.StringClassmy.own.class.Foo

  • java.lang.Class本身当然也是一个类 - 因此也存在一个描述类的实例。我认为这就是事情以某种方式递归的地方。ClassClass

摘要:只有一个元类:。元类的多个实例(元实例?)描述各个类 - 包括元类本身。构造函数描述是元类实例的一部分。java.lang.Class


推荐