Java实现 - 元类

时间:2012-02-18 18:56:15

标签: java metaclass

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

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

2 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:8)

你的问题没有针对构造函数的特殊目标:从描述元级别的类的角度来看,构造函数,“常规方法”和字段都有相同的概念。

所以想一想:

  • Java中的每个类都由一组信息描述:

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

  • 由于JVM加载的每个类都有相同类型的信息,因此它捆绑在一个名为java.lang.Class的自己的类中。

  • 因此,类Class的一个实例描述了类java.lang.StringClass的另一个实例描述了{ {1}}。

  • my.own.class.Foo本身当然也是一个类 - 因此还存在一个描述类java.lang.Class的{​​{1}}的实例。而且我认为事情会以某种方式递归。

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