Frage

Mein Problem ist also: Ich brauche einen Weg, nur eine bestimmte Klasse zu gewährleisten, kann eine andere instanziiert. Ich will nicht die andere eine verschachtelte innere Klasse oder etwas Dummes wie das zu machen habe. Wie mache ich das? Ich vergesse offhand.

War es hilfreich?

Lösung

Machen Sie den Konstruktor privat. Erstellen Sie eine statische Factory-Methode, die eine Instanz der Klasse nimmt, der Zugriff erlaubt ist. Haben die Factory-Methode ein geeignetes Objekt erstellen und eine settor auf das Objekt verwenden, die Zugriff auf das erstellte Objekt erlaubt wird, die Klasse die erstellte Kopie zu geben.

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

     ...
}

BTW, ich bin dieses Design verdächtig. Scheint zu hoch gekoppelt zu mir.

Andere Tipps

Eine private statische innere Klasse ist genau das, was Sie wollen. Nichts stumm über sie.

public class Creator {
  private static class Created {
  }
}

Ansonsten kann man nur Instanziierung auf Paketebene schützen.

public class Created {
  Created() {
  }
}

, die nur Klassen aus dem gleichen Paket Zugriff auf den Konstruktor gibt.

Sie können die Klasse machen, die von Instanziierung Paket privaten geschützt werden soll.

ich mit tvanfosson Antwort einigen und auch mit seinem Kommentar über zu hohen Kopplung. Warum gehst du nicht mehr die Kontrolle über Sie Klasse Erstellungsprozess behalten durch eine Inversion of Control Rahmen wie Frühling oder Guice ?

IMHO Klassen mit der „neuen“ Erklärung zu schaffen ist ein wenig in Betracht gezogen werden ... obsolet werden Fabriken bevorzugt und IoC-Frameworks noch mehr werden.

Viele Grüße

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top