Java Constructeur et de la méthode statique
Quand dois-je utiliser un constructeur et quand dois-je utiliser la méthode statique?
Pouvez-vous expliquer ci-dessus avec petit extrait? J'ai écrémé par quelques fils mais je ne suis toujours pas clair avec ce.
Veuillez lire la FAQ, sur les questions qui devraient être posté ici: stackoverflow.com/faq je suppose que cela correspond à programmers.stackexchange.com
Veuillez lire de base java concepts, il serait de vous aider dans cette
Ne demandez pas pour de petits extraits. Vous n'avez pas d'autre choix que de lire "Effective Java" par Joshua Bloch, l'Article 1 "Envisager statique usine méthodes à la place des constructeurs". C'est un livre à lire pour un développeur Java
Comment cette question bénéficiez de 10 upvotes la façon dont il est formulé de manière!?
Veuillez lire de base java concepts, il serait de vous aider dans cette
Ne demandez pas pour de petits extraits. Vous n'avez pas d'autre choix que de lire "Effective Java" par Joshua Bloch, l'Article 1 "Envisager statique usine méthodes à la place des constructeurs". C'est un livre à lire pour un développeur Java
Comment cette question bénéficiez de 10 upvotes la façon dont il est formulé de manière!?
OriginalL'auteur ram | 2012-12-10
Vous devez vous connecter pour publier un commentaire.
Utiliser un constructeur public, quand on ne veux plus jamais retourner d'un nouvel objet de ce type et que vous voulez la simplicité.
En est un bon exemple StringBuilder que c'est mutable et vous sont susceptibles à vouloir un nouvel objet à chaque fois.
Utiliser un des facteurs statiques méthode lorsque vous souhaitez ré-utiliser des objets (esp si immuable), vous pouvez retourner une sous-classe ou vous voulez descriptice de la construction. Un bon exemple est EnumSet qui a un certain nombre de statique des usines qui font des choses différentes, même si certains ont les mêmes arguments.
Dans ce cas, à l'aide d'un statique d'usine, il est clair que la différence entre ces deux modes de construction de l'ensemble.
Aussi EnumSet peut renvoyer deux implémentations différentes, l'une optimisée pour les énumérations avec un petit nombre de valeurs (<= 64)
RegularEnumSet
et une autre pour le nombre de valeurs appeléJumboEnumSet
Je voudrais affirmer que la StringBuilder est un bon exemple de cas où une statique de l'usine aurait été un meilleur choix. Envisager
StringBuilder.startingWith("prefix")
, ouStringBuilder.withInitialCapacity(64)
. Ceux-ci sont plus immédiatement clair quenew StringBuilder("prefix")
ounew StringBuilder(64)
.Lawrey: Petit extrait de code avec des commentaires aurait été mieux.
Alors que je suis d'accord, c'est légèrement plus clair, pour une augmentation de la complexité, je soupçonne que le seul moment où vous êtes susceptible d'obtenir confus est
new StringBuilder('A');
😉OriginalL'auteur
Joshua Bloch conseille de faveur statique usine méthodes à la place des constructeurs (qui je pense est une bonne pratique).Quelques avantages et inconvénients :
Avantages de la statique des méthodes de fabrique :
Boolean.valueOf(..)
Inconvénients de la statique des méthodes de fabrique :
OriginalL'auteur
Toujours utiliser un constructeur si votre classe a un état (même pour une seule instance; le pattern singleton ).
Utiliser uniquement statique pour les méthodes de l'utilitaire, comme en java.lang.Mathématiques
Exemple:
Ne change pas du tout de l'état (variables d'instance) d'un objet, il peut donc être déclarée statique.
Bon point, un singleton a généralement un constructeur privé, et un statique méthode de fabrique.
OriginalL'auteur
quand vous voulez faire quelque chose sans la création d'objet, puis utiliser la méthode statique.
OriginalL'auteur
Statique usine méthodes ont des noms, les constructeurs ne le font pas. Ainsi, l'usine de méthodes peut transporter naturel de la documentation sur ce qu'ils font que les constructeurs ne le peuvent pas. Voir, par exemple, l'usine de méthodes dans la Goyave, les Bibliothèques, comme
ImmutableMap.copyOf(otherMap)
. Alors que cela peut avoir peu d'effet sur le comportement de la construction, il a un effet énorme sur la lisibilité du code. Certainement envisager cette option si vous êtes à la publication d'un API.Vous pouvez également utiliser une usine lorsque vous avez besoin de faire plus compliqué configuration de l'objet que vous souhaitez créer, surtout si vous avez besoin de publier pour les autres threads (en les inscrivant dans des piscines, de l'exposer comme un MBean, toutes sortes d'autres choses...) pour éviter les racé publication. (Voir, par exemple, Java Simultanéité, Dans la Pratique, la section 3.2)
Méthodes statiques qui ne quelque chose (par exemple
Math.min
) ne sont pas vraiment la même chose que la statique des usines, ce qui peut être considéré comme un remplacement direct pour les constructeurs, avec plus de flexibilité, l'évolutivité et (souvent) de clarté.OriginalL'auteur
Quand vous en avez besoin pour créer une instance d'un objet, vous devez utiliser le constructeur.
Donc, si vous souhaitez créer un objet Voiture, alors vous aurez besoin d'un constructeur.
Le mot-clé static signifie, que votre méthode peut être appelée sans la création d'une instance.
Par exemple, si vous souhaitez utiliser un singleton, ce qui signifie que vous avez une seule instance de l'objet, qui peut être partagée avec les autres, alors vous avez besoin d'une méthode statique, ce qui va à l'interne va appeler le constructeur. Donc, chaque fois que quelqu'un veut une instance de cet objet, vous revenez toujours la même, ce qui vous permettra de consommer de la mémoire que pour une seule.
- vous me donner un petit extrait qui explique au-dessus de la voiture par exemple ?
Tu veux dire le code d'exemple ou d'un récit?
exemple avec des commentaires mentionnant chaque ligne serait formidable. Merci de répondre.
OriginalL'auteur
En général, vous allez utiliser statique de la classe avec des données qui ne sont pas en corrélation avec l'instance de l'objet.
Un autre exemple est:
Que les posts ci dessus dis, c'est juste une question de ce que vous voulez faire et comment vous voulez le faire. Aussi, n'essayez pas de tout comprendre rightaway, écrire un peu de code, puis d'essayer différentes approches de ce code et essayer de comprendre ce que votre code ne. Des exemples sont bonnes, mais vous avez besoin d'écrire et de comprendre ce que vous avez fait. Je pense que c'est la seule façon que vous allez comprendre
pourquoi vous ne le personnel de la façon que vous avez à faire.
OriginalL'auteur
Méthodes statiques ne pas avoir à instancier de nouveaux objets chaque fois. Depuis instanciation d'objet est cher, cela permet des instances être mis en cache à l'intérieur de l'objet. Donc, il peut améliorer les performances.
C'est l'explication de la Efficace Java :
OriginalL'auteur
c'est à dire si vous souhaitez utiliser un singleton, ce qui signifie que vous avez une seule instance de l'objet, qui peut être partagée avec les autres, alors vous avez besoin d'une méthode statique, ce qui va à l'interne va appeler le constructeur. Donc, chaque fois que quelqu'un veut une instance de cet objet, vous revenez toujours la même, ce qui vous permettra de consommer de la mémoire que pour une seule. Vous avez toujours besoin d'un constructeur dans la programmation orientée objet, dans chaque langage OO. En java, un dans de nombreuses autres langues, le constructeur par défaut d'un objet est implicite, et construit automatiquement. Mais vous avez besoin d'une fonctionnalité personnalisée que vous avez à faire votre propre.
Au-dessus de vous voir quelques exemples de l'utilisation. Toutefois, si vous avez quelque chose de spécifique dans votre esprit, s'il vous plaît laissez-nous savoir. Je veux dire, si vous avez un cas spécifique où vous n'êtes pas sûr si vous devez utiliser une méthode statique ou un constructeur. De toute façon, vous aurez certainement besoin d'un constructeur, mais je ne suis pas sûr de la méthode statique.
OriginalL'auteur