我见过通过引用类对象并使用create
方法实现对象创建工厂的地方:class.newInstance()
,它使用反射,可能效率不高与直接调用默认构造函数相比。
如果java支持像return new this();
这样的东西,我可以在父类中实现它,并且可以作为工厂方法工作(如果没有像class.newInstance()
这样的构造函数会抛出异常)
为什么不支持这样的事情?
PS:我在stackOverflow中的第一个问题:)
答案 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”来创建另一个。