Java Le Pattern Singleton
Edit: Répondu erreur a été la méthode n'était pas statique
Je suis en train d'utiliser le Modèle De Conception Singleton
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
//Private constructor prevents instantiation from other classes
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
Ma question est comment puis-je créer un objet de la classe Singleton dans un autre classe?
J'ai essayé:
Singleton singleton = new Singleton();
//error - constructor is private
Singleton singleton = Singleton.getInstance();
//error - non-static method cannot be referenced from a static context
Qu'est-ce que le bon code?
Grâce,
Spencer
- Pour info, certaines personnes évitent l'utilisation de
get
ici dansgetInstance()
en raison de la JavaBean convention de nommage pour les propriétés. Une alternative seraitinstance()
.
Vous devez vous connecter pour publier un commentaire.
est la bonne manière. Assurez-vous que votre
getInstance()
méthode est en effetstatic
.Depuis votre
Singleton
mise en œuvre est loin d'être sûr - votre objet peut être instancié par la réflexion, vous souhaiterez peut-être créer un singleton basé surenum
Singleton singleton = Singleton.getInstance();
devrait fonctionner -- que l'erreur n'a pas de sens, compte tenu de votre code; êtes-vous sûr que vous êtes en train de correctement? (Il serait bon que vous aviez oublié de faire lagetInstance
méthode statique, qui vous l'avez fait dans votre code ci-dessus.)Le code que vous avez donné pour la classe est correct.
Enfin, une note conceptuelle: tout d'Abord, vous n'êtes pas "la création d'un objet de la classe Singleton" -- qui est le point de l'ensemble d'un Singleton. 🙂 Vous êtes une référence à l'objet existant.
Celui-ci:
devrait fonctionner. C'est de cette façon que vous appelez des méthodes statiques dans Java. Et le
getInstance()
méthode est déclarée commestatic
. Êtes-vous sûr d'utiliser le mêmeSingleton
classe? Ou peut-être que vous avez importé une classe appelée la même dans un autre paquet.vous devriez être en utilisant
public static Singleton getInstance()
, mais la mise en œuvre n'est pas très correct.if (instance == null) {
instance = new Singleton();
}
return instance;
C'est la façon dont vous devez être le faire. Ceci s'assurer qu'il crée l'instance si elle n'existe pas, ou tout simplement renvoie l'instance existante. Votre code peut aussi faire la même chose, mais cela ajoute à la lisibilité.
Puisque nous ne voulons pas permettre à plus d'une copie accessible. Nous avons donc besoin d'instancier manuellement un objet, mais nous avons besoin de garder une référence du singleton, de sorte que les appels suivants à la méthode d'accesseur pouvez retourner le singleton (plutôt que d'en créer un nouveau).
C'est pourquoi
Manière correcte pour accéder à tout singletonObject.
Il n'y a rien de mal à utiliser
C'est la façon d'obtenir le singleton forme d'objet de la classe. Il me doit quelque chose d'autre. S'il vous plaît poster un peu plus de détails
Il est toujours possible de créer plus d'une instance de la classe, comme suit:
depuis la méthode getInstance() est "statique" et le champ de trop, yo pouvez utiliser un Singleton).getInstance(); Sans créer de nouveaux exeple de classe. Thihs est le poit de singletone