我已经看到通过引用类对象并具有create
执行此操作的方法来实现对象创建工厂的地方:class.newInstance()
,它使用反射,与直接调用默认构造函数相比可能效率不高。
如果 java 支持类似的东西return new this();
,我可以在父类中实现它,这将作为工厂方法工作(如果没有这样的构造函数,则会抛出异常class.newInstance()
)。
为什么不支持这种东西?
PS:我在stackOverflow的第一个问题:)
按照设计,this
关键字仅在实例的上下文中有效。它的类型是它所在的类的类型。
来自 Java 语言规范:
当用作主要表达式时,关键字 this 表示一个值,该值是对调用实例方法的对象(第 15.12 节)或正在构造的对象的引用。
如果要使用默认构造函数创建新对象,可以直接调用它。
return new MyType();
如果要创建对象的克隆,则可以使用该Object.clone()
方法。
你可以接近使用this.getClass().newInstance()
但是,不推荐这种方法。一方面,它要求类具有默认构造函数。
我认为这是因为当您使用“this”时意味着该对象已经创建,所以您不能使用“new this”来创建另一个。
根据java文档
在实例方法或构造函数中,this 是对当前对象的引用——调用其方法或构造函数的对象。您可以使用 this 从实例方法或构造函数中引用当前对象的任何成员。
所以这是保存对象的当前实例。它不是一种类型。
但是当你初始化一个对象时,你需要用类类型来初始化它。喜欢
ClassType c = new ClassType();
所以这两件事是完全不同的。这就是为什么你不能初始化this
回答你的问题是你怎么能在instance
不知道的情况下创建一个类 class name
?然而this
关键字适用于current object
您尚未创建的。