Constructeur de surcharge en Java - les meilleures pratiques
Il y a quelques sujets similaires pour cela, mais je ne pouvais pas en trouver un avec une réponse suffisante.
Je voudrais savoir quelle est la meilleure pratique pour le constructeur de surcharge en Java. J'ai déjà mes propres réflexions sur le sujet, mais j'aimerais entendre plus de conseils.
Je fais référence à la fois à la surcharge de constructeur dans une classe simple et la surcharge de constructeur tout en héritant d'un déjà surchargé de classe (la classe de base a surchargé les constructeurs).
Merci 🙂
Vous devez vous connecter pour publier un commentaire.
Alors qu'il n'existe pas de lignes directrices officielles" j'ai suivi le principe de la BAISER et de la SEC. Faire des constructeurs surchargés aussi simple que possible, et de la façon la plus simple est qu'elle ne fait appel de cette(...). De cette façon, vous avez uniquement besoin de vérifier et de gérer les paramètres une fois et une seule fois.
À partir d'un test d'unité de point de vue, il deviendra facile de tester la classe puisque vous pouvez mettre dans les ressources en elle. Si la classe possède de nombreuses ressources (ou des collaborateurs comme certains OO-geeks appeler), pensez à l'une de ces deux choses:
Faire un paramètre de classe
Le constructeur Simples que les besoins de diviser le
SimpleParams
paramètre:...ou faire
SimpleParams
un attribut:Faire une classe factory
Faire une usine de classe qui initialise les ressources pour vous, ce qui est favorable si l'initialisation de ressources est un peu difficile:
Le constructeur est alors fait de la même manière qu'avec le paramètre de la classe:
Faire une combinaison des deux
Ouais... vous pouvez mélanger et faire correspondre les deux façons selon ce qui est plus facile pour vous à l'époque. Paramètre classes et simple de l'usine de classes sont à peu près la même chose compte tenu de la
Simple
classe qu'ils sont utilisés de la même manière.Je pense que la meilleure pratique est d'avoir primaire unique constructeur à laquelle les constructeurs surchargés consulter en appelant
this()
avec les valeurs par défaut des paramètres. La raison pour cela est qu'il est beaucoup plus claire de ce qu'est la construits état de l'objet est - vraiment, vous pouvez penser à la primaire constructeur comme le seul véritable constructeur, les autres de lui déléguerUn exemple de ceci pourrait être
JTable
- le principal constructeur prend unTableModel
(en plus de la colonne et de la sélection de modèles) et les autres constructeurs appel de ce premier constructeur.Pour les sous-classes où la super-classe a déjà constructeurs surchargés, j'aurais tendance à penser que c'est raisonnable pour traiter l'un des parents constructeurs de la classe comme primaire et pense qu'il est parfaitement légitime de ne pas avoir un seul primaire constructeur. Par exemple,lors de l'extension
Exception
, j'ai souvent fournir des 3 constructeurs, l'un prenant juste unString
message, qui prenait uneThrowable
la cause et de l'autre tenant à la fois. Chacun de ces constructeurs appelssuper
directement.Si vous avez un complexe très classe avec beaucoup d'options, dont seulement certaines combinaisons sont valables, pensez à utiliser un Générateur de rapports. Fonctionne très bien à la fois codewise mais aussi logiquement.
Le Constructeur est une classe imbriquée avec les méthodes conçu uniquement pour définir les champs, puis la ComplexClass constructeur ne prend qu'un tel Générateur comme argument.
Edit: Le ComplexClass constructeur ne peut garantir que l'etat le Constructeur est valable. C'est très difficile à faire si vous venez d'utiliser les setters sur ComplexClass.
Cela dépend vraiment du type de cours que pas toutes les classes sont créés égaux.
Comme ligne directrice générale je dirais 2 options:
Bien, voici un exemple pour les constructeurs surchargés.
Dans l'exemple ci-dessus, vous pouvez voir les constructeurs surchargés. Nom des constructeurs est le même, mais chaque constructeurs différents paramètres.
Voici quelques ressources qui jette plus de lumière sur la surcharge de constructeur en java,
Les constructeurs.
Constructeur explication.