Question rapide Java: Instanciation d’une classe donnée à partir d’une autre?

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

  •  03-07-2019
  •  | 
  •  

Question

Mon problème est donc le suivant: j'ai besoin d'un moyen de m'assurer que seule une classe donnée peut en instancier une autre. Je ne veux pas faire de l’autre une classe interne imbriquée ou quelque chose d’audacieux comme ça. Comment puis-je faire cela? J'oublie tout de suite.

Était-ce utile?

La solution

Rendre le constructeur privé. Créez une méthode de fabrique statique qui prend une instance de la classe dont l'accès est autorisé. Demandez à la méthode factory de créer un objet approprié et utilisez un séparateur sur l'objet autorisé à accéder à l'objet créé pour donner à cette classe la copie créée.

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, je me méfie de cette conception. Cela me semble trop étroitement couplé.

Autres conseils

Une classe interne statique privée est exactement ce que vous voulez. Rien d'idiot à ce sujet.

public class Creator {
  private static class Created {
  }
}

Sinon, vous ne pouvez protéger l'instanciation qu'au niveau du package.

public class Created {
  Created() {
  }
}

Qui donne seulement aux classes du même paquet accès au constructeur.

Vous pouvez rendre la classe à protéger du package d'instanciation privée.

Je suis d’accord avec la réponse de tvanfosson et avec son commentaire sur le couplage trop élevé. Pourquoi ne gardez-vous pas plus de contrôle sur votre processus de création de classe en adoptant un cadre Inversion of Control comme Spring ou Guice ?

IMHO créer des classes avec le " nouveau " déclaration doit être considérée un peu ... obsolète, les usines doivent être préférés et les cadres IoC encore plus.

Cordialement

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top