9 votes

Pourquoi pourrait-on aussi utiliser un constructeur vide ?

J'ai récemment lu du Java et je suis tombé sur quelque chose (un idiome?) de nouveau pour moi : dans le programme, les classes avec plusieurs constructeurs incluraient également toujours un constructeur vide. Par exemple :

public class Genotype {
  private boolean bits[];
  private int rating;
  private int length;
  private Random random;

  public Genotype() {              //  <= C'est le bandit, celui-ci ici
    random = new Random();
  }

  /* crée un génotype aléatoire */
  public Genotype(int length, Random r) {
    random = r;
    this.length = length;
    bits = new boolean[length];

    for(int i=0;i

`

Le premier constructeur ne semble pas être un constructeur "réel", il semble que dans tous les cas l'un des autres constructeurs sera utilisé. Alors, pourquoi ce constructeur est-il défini?

`

0voto

Eldelshell Points 1414

Ce n'est PAS un constructeur de copie. Fondamentalement, vous voulez des constructeurs vides lorsque vous travaillez avec un framework. Il doit toujours y avoir un constructeur vide, bien sûr, public ou privé, mais au moins cela vous permet de garder le contrôle sur la façon dont la classe est instanciée (ou non).

0voto

duffymo Points 188155

Je suis habituellement un constructeur qui initialise complètement l'objet; s'il y en a d'autres, ils appellent tous this(...) avec des valeurs par défaut appropriées.

Un objet devrait être entièrement initialisé et prêt à être utilisé lors de sa création.

Certains frameworks, par exemple Hibernate, exigent un constructeur sans arguments. La manière dont ils entrent en conflit avec les bonnes pratiques me rend parfois mal à l'aise.

0voto

Mark Renouf Points 13128

Avoir un constructeur par défaut et vide empêche d'avoir des champs finaux. Cela conduit à beaucoup de mutabilité là où ce n'est souvent pas nécessaire.

Le modèle du constructeur vous permet de mélanger ces deux styles et de permettre une initialisation plus flexible tout en conservant l'immutabilité en cachant un constructeur à plusieurs arguments derrière la fabrique.

0voto

Weidian Huang Points 643

Pour certaines classes POJO ou classes simples, le constructeur par défaut est utile lorsque vous souhaitez parfois effectuer des tests unitaires sur la classe les utilisant. Vous n'avez pas besoin de les simuler, vous pouvez créer un objet avec le constructeur par défaut et tester les valeurs définies et obtenues à partir d'eux ou les passer en tant qu'argument.

0voto

bwet Points 1

Vous voulez créer un constructeur vide pour les classes qui étendent cette classe et puisqu'elle a été étendue la classe... l'enfant a maintenant super qui référence la classe au-dessus de lui, son parent. Dans le cas où l'enfant n'a pas spécifié super(choses)... les choses à l'intérieur pour référencer les autres constructeurs pour l'utiliser tenteront maintenant de référencer le constructeur vide.

Je ne suis pas sûr de quel sera l'erreur, je suis en train de coder ma première relation d'objet parent maintenant et je recherchais des chose ici ha, santé.

Je suppose que je devrais ajouter que dès que vous créez un constructeur qui n'est pas le vide, vous perdez le vide par défaut, donc maintenant super() qui est par défaut dans la classe étendue n'aura rien à quoi se référer. Bien sûr, si vous avez créé les classes étendues pour s'occuper de super en spécifiant lequel se débarrasse du super() par défaut alors vous contournez cela mais que se passe-t-il si quelqu'un veut utiliser votre classe et l'étendre et ne réalise pas qu'il n'y a pas d'ensemble vide lorsque vous auriez pu en créer un.

Ceci est mon premier message mais je voulais tenter ma chance pour exprimer comment je le comprends.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X