这可能只是个人品味和工作流程的问题,但如果不止于此,我觉得我还是应该问一下。
在 Java 中,通过构造函数创建实例和通过静态方法(返回实例)创建实例有什么区别?例如,从我正在从事的项目中获取这段代码(在发布时手写,因此采取了一些快捷方式和自由):
Plugin main;
Map<int, int> map;
public Handler(Plugin main) {
this.main = main;
}
public static Handler init(Plugin main) {
Handler handler = new Handler(main);
handler.createMap();
}
public void createMap() {
this.map = Maps.newHashMap();
}
在这种情况下,使用
有什么区别?Handler handler = new Handler(this);
和
Handler handler = Handler.init(this);
在 Plugin 类中,除了 createMap()
仅在后者中运行,因为它未在构造函数中调用?
澄清一下,在这种情况下,Plugin
被认为是主类。
我对 Java 语法的了解足以编写中级插件,但对 Java 本身的了解还不够了解这两种实现方式之间的区别。
编辑:例如,我用来创建 Map
的 Maps
类使用称为 using 的静态工厂方法(我希望我正确使用该术语)类而不是对象。
最佳答案
静态工厂方法既有优点也有缺点。
优势
- 描述性的、有意义的名称。
- 当被调用时,他们可以决定是否返回一个新的实例
- 它们可以返回返回类型的任何子类型的对象
- 它们减少了创建参数化类型实例的冗长
缺点
- 如果只提供静态工厂方法,则没有公共(public)或 protected 构造函数的类不能被子类化
- 它们不容易与其他静态方法区分开来
资料来源:Effective Java,第二版。
关于Java:通过构造函数初始化和通过静态方法初始化之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15102384/