8

我已经看到通过引用类对象并具有create执行此操作的方法来实现对象创建工厂的地方:class.newInstance(),它使用反射,与直接调用默认构造函数相比可能效率不高。

如果 java 支持类似的东西return new this();,我可以在父类中实现它,这将作为工厂方法工作(如果没有这样的构造函数,则会抛出异常class.newInstance())。

为什么不支持这种东西?

PS:我在stackOverflow的第一个问题:)

4

5 回答 5

4

按照设计,this关键字仅在实例的上下文中有效。它的类型是它所在的类的类型。

来自 Java 语言规范:

当用作主要表达式时,关键字 this 表示一个值,该值是对调用实例方法的对象(第 15.12 节)或正在构造的对象的引用。

如果要使用默认构造函数创建新对象,可以直接调用它。

 return new MyType();

如果要创建对象的克隆,则可以使用该Object.clone()方法。

于 2013-05-24T13:32:07.547 回答
2

你可以接近使用this.getClass().newInstance()

但是,不推荐这种方法。一方面,它要求类具有默认构造函数。

于 2013-05-24T13:32:22.783 回答
1

我认为这是因为当您使用“this”时意味着该对象已经创建,所以您不能使用“new this”来创建另一个。

于 2013-05-24T13:37:52.857 回答
1

根据java文档

在实例方法或构造函数中,this 是对当前对象的引用——调用其方法或构造函数的对象。您可以使用 this 从实例方法或构造函数中引用当前对象的任何成员。

所以这是保存对象的当前实例。它不是一种类型。

但是当你初始化一个对象时,你需要用类类型来初始化它。喜欢

ClassType c = new ClassType();

所以这两件事是完全不同的。这就是为什么你不能初始化this

于 2013-05-24T13:34:02.010 回答
1

回答你的问题是你怎么能在instance不知道的情况下创建一个类 class name?然而this关键字适用于current object您尚未创建的。

于 2013-05-24T13:35:17.190 回答