4

したがって、私の問題は次のとおりです。特定のクラスだけが別のクラスをインスタンス化できるようにする方法が必要です。もう一方をネストされた内部クラスにする必要はありません。どうすればいいですか?手ぶらで忘れます。

4

4 に答える 4

8

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

public class Creator {
  private static class Created {
  }
}

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

public class Created {
  Created() {
  }
}

これにより、同じパッケージのクラスのみがコンストラクターにアクセスできます。

于 2009-01-02T01:46:33.640 に答える
1

インスタンス化パッケージから保護するクラスを非公開にすることができます。

于 2009-01-02T01:45:26.200 に答える
1

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

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() );
     }

     ...
}

ところで、私はこのデザインを疑っています。私には結合度が高すぎるようです。

于 2009-01-02T01:48:38.580 に答える
-2

tvanfosson の回答と、カップリングが高すぎるという彼のコメントにも同意します。SpringGuiceなどのInversion of Controlフレームワークを採用して、クラス作成プロセスをさらに制御しませんか?

「new」ステートメントを使用してクラスを作成する私見は、少し考慮されるべきです...時代遅れであり、ファクトリが優先され、IoCフレームワークがさらに優先されます。

よろしく

于 2009-01-02T02:11:28.690 に答える