繁体   English   中英

关于构造函数与静态工厂方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM