调用new和getInstance()之间的区别

SIr*_*lot 14 java abstract-class

呼叫Class.getInstance()等同于new Class()?我知道后者需要构造函数,但是怎么getInstance()办?谢谢.

Bal*_*usC 24

没有这样的方法Class#getInstance().你可能会混淆它Class#newInstance().是的,这new默认构造函数完全相同.这是它的Javadoc的摘录:

创建此Class 对象表示的类的新实例.该类被实例化,就像new 具有空参数列表的表达式一样.如果尚未初始化,则初始化该类.

在代码中,

Object instance = Object.class.newInstance();
Run Code Online (Sandbox Code Playgroud)

是相同的

Object instance = new Object();
Run Code Online (Sandbox Code Playgroud)

Class#newInstance()调用实际上遵循Factory Method模式.


更新:看到其他答案,我意识到你的问题有些含糊不清.好吧,使用实际命名方法的地方getInstance()通常表示抽象工厂模式.它将"在引擎盖下"使用newClass#newInstance()创建并返回感兴趣的实例.它只是隐藏了您可能不需要了解的具体实现的所有细节.

此外,您还会在Singleton模式的某些(主要是自行开发的)实现中看到此方法名称.

也可以看看:


小智 5

绝对(通常)不是.

getInstance是Java中Singleton Pattern常用的静态方法.该new 关键字实际上创建了一个新的对象.在某些时候,必须有一个new(尽管有一些其他方法来实例化新对象)来实际创建getInstance返回的对象.


tra*_*god 5

在抽象类的上下文中,getInstance()方法可以表示工厂方法模式.一个例子是抽象Calendar类,它包括静态工厂方法和具体子类.