Javaのクイック質問:特定のクラスを別のクラスからのみインスタンス化する?

StackOverflow https://stackoverflow.com/questions/405826

  •  03-07-2019
  •  | 
  •  

質問

したがって、私の問題は、特定のクラスの1つだけが別のクラスをインスタンス化できるようにする方法が必要だということです。もう一方をネストされた内部クラスまたはそのような愚かなものにする必要はありません。どうすればいいですか?オフハンドを忘れます。

役に立ちましたか?

解決

コンストラクタをプライベートにします。アクセスが許可されているクラスのインスタンスを取得する静的ファクトリメソッドを作成します。ファクトリメソッドに適切なオブジェクトを作成させ、作成されたオブジェクトへのアクセスを許可されているオブジェクトのセッターを使用して、そのクラスに作成されたコピーを提供します。

public class AllowedAccess
{
    private SecureClass secure;
    public setSecureClass( SecureClass secure )
    {
        this.secure = secure;
    }

    ...
}

public class SecureClass
{
     private SecureClass() {}

     public static void Create( AllowedAccess allowed )
     {
          allowed.setSecureClass( new SecureClass() );
     }

     ...
}

ところで、私はこのデザインを疑っています。私と強く結びついているようです。

他のヒント

プライベートな静的内部クラスはまさにあなたが望むものです。それについて愚かなことは何もありません。

public class Creator {
  private static class Created {
  }
}

それ以外の場合は、パッケージレベルでのみインスタンス化を保護できます。

public class Created {
  Created() {
  }
}

同じパッケージのクラスのみにコンストラクターへのアクセスを許可します。

インスタンス化パッケージから保護されるクラスをプライベートにすることができます。

tvanfossonの答えと、カップリングが高すぎるというコメントにも同意します。 Inversion of Control フレームワークを採用して、クラス作成プロセスの制御を維持しないのはなぜですか。 Spring ガイド

「新規」を使用してクラスを作成する私見ステートメントは少し考えられます...時代遅れ、工場が優先され、IoCフレームワークはさらに多くなります。

よろしく

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top