1

以下のようにクラスにコンストラクターがある場合のクエリがありました..

class A
{
  A{}

}

コンストラクターに代わるものは何ですか、私は静的ファクトリメソッドであるアプローチに行きました

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

}

分析による上記のアプローチでは、不変オブジェクトを返しますが、静的ファクトリメソッドで返すことができ、後で変更できるオブジェクトとして、この分析には疑問があります。完全に不変にする方法..!! お知らせ下さい..!!

4

2 に答える 2

1

不変性は、オブジェクトの作成方法とは関係ありません。つまり、コンストラクタまたはファクトリ メソッドから。

Collections.unmodifiableCollectionJDK は、および関連するメソッドを使用して、コレクションに対してこれを行ういくつかの方法を提供します。

設計に組み込むこともできます。これは、並行アプリケーションで作業するときに役立ちます。

このための完全な戦略はここにあります: 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();
  }

}

--> さて、このクラスは不変オブジェクトを返しません。クラスを不変にするには、クラスを final にし、すべてのメンバーを private および final にし、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 に答える