L'extension d'un singleton en Java
Ce que je voudrais faire est de simplement faire une classe qui lorsque vous l'étendre, vous obtenez automatiquement la getInstance classe. Le problème c'est que quand je l'étends, je ne peut pas référence à la classe enfant. La seule façon que je pouvais voir de le faire est par typecasting ((ClassName)de la classe.getInstance()) mais ce n'est pas très convivial. Des suggestions?
C'est une autre raison pourquoi les Singletons ne sont pas destinés à une utilisation dans des applications du monde réel. Si vous voulez quelque chose comme cela, vous devez créer une méthode statique sur chaque classe qui étend le Singleton classe parent depuis
Pourriez-vous poster ce que vous avez écrit, afin que nous puissions vous aider. En passant, la plupart du temps, singleton est déconseillé.
Votre
pourriez-vous ajouter votre commentaire est une réponse? Vous frappez le clou de la première, et aucune des réponses actualisées en approcher.
Je ne suis pas vraiment sûr si c'est une réponse (encore). Notez que l'OP n'a pas ajouté un commentaire ici défendre le singleton utilisation, donc je ne pense pas est toujours bon de publier la réponse.
static
méthodes ne peuvent pas être héritée.Pourriez-vous poster ce que vous avez écrit, afin que nous puissions vous aider. En passant, la plupart du temps, singleton est déconseillé.
Votre
getInstance()
méthode sera static
de sorte que vous ne peut pas le remplacer stackoverflow.com/questions/2223386/... - Singletons ne sont pas de grands que la portée est entre dans le jeu stackoverflow.com/a/16076495/573057pourriez-vous ajouter votre commentaire est une réponse? Vous frappez le clou de la première, et aucune des réponses actualisées en approcher.
Je ne suis pas vraiment sûr si c'est une réponse (encore). Notez que l'OP n'a pas ajouté un commentaire ici défendre le singleton utilisation, donc je ne pense pas est toujours bon de publier la réponse.
OriginalL'auteur Arhowk | 2013-04-29
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas étendre un bon Singleton car il est censé avoir un constructeur privé:
Efficace Java Article 2: Appliquer le singleton de la propriété avec un constructeur privé
mais que vous ne pouvez pas le lancer. L'appel au constructeur de getInstance() ne fonctionne pas
L'OP soit l'intention de la super-classe à être lui-même un singleton, ou pas. Présumer l'ancien était vrai. Alors la super-classe destinée à être un singleton pourrait être sous-classé, conduisant à plus d'une instance, ce qui en ferait ... pas un singleton. Si l'ancien résultats dans une contradiction. Ce dernier est faisable. On pourrait définir une super-classe pour les singletons, avec une non-constructeur privé. Pour ce cas, le constructeur n'est pas le problème. Le problème est
getInstance()
. Il doit être une méthode statique, car il est appelé sans une instance. Mais les méthodes statiques ne sont pas héritées.Protégé constructeur signifie que vous pouvez créer de nouvelles instances de n'importe où à l'intérieur de l'emballage. Qui ne sera pas un bon singleton maintenant, serait-il?
Peut-être, pour la clarté de l'exposé, dans un site protégé par défaut//constructeur public, nous pouvons jeter une exception dans le cas _INSTANCE n'est pas NULL
OriginalL'auteur Evgeniy Dorofeev
La seule façon de remplacer un singleton est d'avoir un singleton qui s'attend à être remplacée. La façon la plus simple de le faire est de fournir Singleton qui implémente une
interface
(ou sinon entièrementabstract
lui-même) qu'en interne instancie un injectée singleton lors de la première utilisation degetInstance()
.Créer une classe:
public class SingletonMethodsImpl { public String getName() { return ""; } public void doSomething(Object something) { } }
. Ensuite, créez un fichier pour leServiceLoader
à utiliser dansMETA-INF/services/package.of.SingletonMethods
dont la seule valeur estpackage.of.SingletonMethodsImpl
(oùpackage.of
est ce que la page est).OriginalL'auteur pickypg