我有一个查询,如果我们在下面的类中有构造函数..
class A
{
A{}
}
现在构造函数的替代方法是什么,我已经采用了静态工厂方法的方法
class A
{
public staic A getinstance()
{
return new A();
}
}
在上述方法中,根据分析,它将返回不可变对象,但我对此分析表示怀疑,因为该对象可以使用静态工厂方法返回并且以后可以更改,如何使其完全不可变..!! 请指教..!!
我有一个查询,如果我们在下面的类中有构造函数..
class A
{
A{}
}
现在构造函数的替代方法是什么,我已经采用了静态工厂方法的方法
class A
{
public staic A getinstance()
{
return new A();
}
}
在上述方法中,根据分析,它将返回不可变对象,但我对此分析表示怀疑,因为该对象可以使用静态工厂方法返回并且以后可以更改,如何使其完全不可变..!! 请指教..!!
不变性与您创建对象的方式无关。即来自构造函数或工厂方法。
JDK 为 Collections 提供了一些方法来做到这一点,使用Collections.unmodifiableCollection
和相关的方法。
您还可以将它合并到您的设计中,这在处理并发应用程序时会变得很有用。
这里给出了一个完整的策略: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();
}
}
--> 这个类不会返回不可变对象。为了使类不可变,使类最终,所有成员私有和最终,仅提供 getter 方法和参数化构造函数。见下面的例子:
final class A
{
final private int b;
public A(int b)
{
this.b = b;
}
public int getB() {
return this.b;
}
}