为什么我们不能在java中使用“this”关键字创建对象?

时间:2013-05-24 13:28:34

标签: java oop this factory

我见过通过引用类对象并使用create方法实现对象创建工厂的地方:class.newInstance(),它使用反射,可能效率不高与直接调用默认构造函数相比。

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

为什么不支持这样的事情?

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

5 个答案:

答案 0 :(得分:4)

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

来自Java语言规范:

  

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

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

 return new MyType();

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

答案 1 :(得分:2)

您可以使用this.getClass().newInstance()

来结束

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

答案 2 :(得分:1)

根据java doc

  

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

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

但是在初始化对象时,需要使用类类型对其进行初始化。像

ClassType c = new ClassType();

所以这两件事完全不同。这就是为什么你不能用this

进行初始化

答案 3 :(得分:1)

回答你的问题是如何在不知道instance的情况下创建课程的class name?但this关键字适用于您尚未创建的current object

答案 4 :(得分:1)

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