![]() |
1
2
这似乎或多或少是一种设计选择。自从我 设计这种语言,我不能肯定地回答,但我会试图解释这一点的潜在原因。
理解这一点的诀窍是
Java-Doc of the Class (这里来自Java 7):
如果您编写代码,那么您正在编写自定义类,这意味着您创建的代码就是该类。如果创建一个名为
,这是你的课。这个
第二条
如果java语言的java.lang.Class类,类加载器必须实例化类的正确子类型,对应于所需的子类型。如果您能够在何处创建java.lang.Class类,很快就会失控。类加载器如何知道哪个类实例连接到您的类型?您是否必须编写特定的类实例并以某种方式标记您创建的类型以使用该类实例?你可以想象这样的情景:
但是,如何在自定义域中填充自定义域java.lang.Class类实例?这些并发症可能是java.lang.Class类具有泛型类型,表示连接的类型。事件尽管有一百万种可能的解决方案来解决这些复杂问题,但是仍然有一个关于可用性和健壮性的争论。 正如甲骨文所指出的 Design Goals of the Java Programming Language :
这是必需的,因为我们希望将某些类连接到某些对象。但是,我们没有指定如何实例化类。通常,类是通过类加载器实例化的。再次从 JavaDoc : 这将不再可行,除非我们需要像私有构造函数这样的某些方面。此外,我们必须提供每个自定义类作为本机C++代码。 另一种可能是,在类似这样的实现中定义getClass方法(这段代码有不同的基于泛型的问题,但同样,只是一个示例):
InvocationHandler 例如。另一个问题是,现在开发人员可以自由地决定一个类是只实例化一次还是多次,这将打破例如 Class-Based-Programming 当然还有Java语言的一些方面。 尽管我不能肯定地回答,但我希望这能有所帮助。 |