[英]Regarding constructors Vs Static Factory Methods
我正在查询是否在类中有如下构造函数。
class A
{
A{}
}
现在构造函数的替代方法是什么,我采用的是静态工厂方法
class A
{
public staic A getinstance()
{
return new A();
}
}
在以上根据分析的方法中,它将返回不可变的对象,但是我对此分析表示怀疑,因为该对象可以通过静态工厂方法返回并可以在以后进行更改,如何使其完全不可变..! 请指教..!!
不变性与创建对象的方式无关。 即从构造函数或工厂方法 。
JDK使用Collections.unmodifiableCollection
和相关方法提供了一些用于Collections的方法。
您也可以将其合并到您的设计中,这在使用并发应用程序时非常有用。
此处提供了完整的策略: http : //docs.oracle.com/javase/tutorial/essential/concurrency/imstrat.html
替代构造函数: static factory methods
不能替代构造函数。 但是您可以进行等效于构造函数的block intialization
,但是缺点是您不能像这样传递参数:
class B {
private int i;
//intialization block, can not pass arguments like constructor
{
i=2;
}
//getter and setters
}
。
class A
{
public staic A getinstance()
{
return new A();
}
}
->很好,此类不会返回不可变的对象。 要使类不可变,请将类设为final,将所有成员设为private和final,仅提供getter方法和参数化构造函数。 参见以下示例:
final class A
{
final private int b;
public A(int b)
{
this.b = b;
}
public int getB() {
return this.b;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.