Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于构造函数与静态工厂方法_Java - Fatal编程技术网

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

Java 关于构造函数与静态工厂方法,java,Java,我有一个问题,就是我们是否在类中有构造函数,如下所示 class A { A{} } 现在,构造函数的替代方法是什么,我选择了静态工厂方法 class A { public staic A getinstance() { return new A(); } } 在上面的方法中,根据分析,它将返回不可变对象,但我对这个分析有疑问,因为这个对象可以用静态工厂方法返回,以后可以更改,如何使它完全不可变。。!!请建议 构造函数的替代方法:静态工厂方法不是构造函数的替代方法。但是您可以

我有一个问题,就是我们是否在类中有构造函数,如下所示

class A
{
  A{}

}
现在,构造函数的替代方法是什么,我选择了静态工厂方法

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

}

在上面的方法中,根据分析,它将返回不可变对象,但我对这个分析有疑问,因为这个对象可以用静态工厂方法返回,以后可以更改,如何使它完全不可变。。!!请建议

构造函数的替代方法:
静态工厂方法
不是构造函数的替代方法。但是您可以使用与构造函数等效的
块初始化
,但缺点是您不能像这样向其传递参数:

class B {
  private int i;
  //intialization block, can not pass arguments like constructor
  {
    i=2;
  }
  //getter and setters
}

-->这个类不会返回不可变的对象。要使类不可变,请使类为final,所有成员为private和final,只提供getter方法和参数化构造函数。请参见以下示例:

final class A
{
   final private int b;
  public A(int b)
  {
    this.b = b;
  }

   public int getB() {
       return this.b;
   }

}

构造函数的替代方法:
静态工厂方法
不是构造函数的替代方法。但是您可以使用与构造函数等效的
块初始化
,但缺点是您不能像这样向其传递参数:

class B {
  private int i;
  //intialization block, can not pass arguments like constructor
  {
    i=2;
  }
  //getter and setters
}

-->这个类不会返回不可变的对象。要使类不可变,请使类为final,所有成员为private和final,只提供getter方法和参数化构造函数。请参见以下示例:

final class A
{
   final private int b;
  public A(int b)
  {
    this.b = b;
  }

   public int getB() {
       return this.b;
   }

}
不变性与创建对象的方式无关。i、 e.来自施工人员或工厂方法

JDK使用
Collections.unmodifiableCollection
和相关方法为集合提供了一些方法

您还可以将其合并到设计中,这在处理并发应用程序时非常有用

这里给出了一个完整的策略:

不变性与您创建对象的方式无关。i、 e.来自施工人员或工厂方法

JDK使用
Collections.unmodifiableCollection
和相关方法为集合提供了一些方法

您还可以将其合并到设计中,这在处理并发应用程序时非常有用


这里给出了一个完整的策略:

这可以帮助您[不可变对象][1][1]:请查看此链接[1]:这可以帮助您[不可变对象][1][1]:请查看此链接[1]: