1

我有一个查询,如果我们在下面的类中有构造函数..

class A
{
  A{}

}

现在构造函数的替代方法是什么,我已经采用了静态工厂方法的方法

class A
{
  public staic A getinstance()
  {
return new A();
}

}

在上述方法中,根据分析,它将返回不可变对象,但我对此分析表示怀疑,因为该对象可以使用静态工厂方法返回并且以后可以更改,如何使其完全不可变..!! 请指教..!!

4

2 回答 2

1

不变性与您创建对象的方式无关。即来自构造函数工厂方法

JDK 为 Collections 提供了一些方法来做到这一点,使用Collections.unmodifiableCollection和相关的方法。

您还可以将它合并到您的设计中,这在处理并发应用程序时会变得很有用。

这里给出了一个完整的策略:http: //docs.oracle.com/javase/tutorial/essential/concurrency/imstrat.html

于 2012-08-17T05:53:35.580 回答
0

构造函数的替代方案: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;
   }

}
于 2012-08-17T05:42:18.533 回答