4 votes

l'attribution de valeurs d'attributs dans le constructeur ou dans la classe, quelle est la meilleure solution ?

Existe-t-il une différence entre les types d'instanciation suivants ? Si je fixe la valeur directement à l'endroit où la variable est définie ou dans le constructeur de la classe.

Si ce n'est pas le cas, quelle est la meilleure pratique ?

"En classe" :

class A {
    boolean b = true;

    public A(){
    }
}

"Dans le constructeur" :

class B {
    boolean b;

    public B(){
        b = true;
    }
}

Le type de variable n'est donné qu'à titre d'exemple. La seule différence que je vois est que lorsque l'attribut est un type complexe (une classe), son constructeur dépend des valeurs données au constructeur de la classe qui le contient :

class A {
    B b;
    public A(String s){
        b = new B(s);
    }
}

4voto

Sayem Ahmed Points 11839

En fait, les deux sont équivalents. Toutefois, du point de vue de la lisibilité, la première est plus facile à lire. De plus, il est facile de voir la valeur par défaut lorsque quelqu'un navigue vers la déclaration de la variable à partir d'un IDE (comme ctrl + clic de souris dans Eclipse).

Vérifiez ce que le tutoriel officiel a à dire -

Cette méthode fonctionne bien lorsque l'initialisation l'initialisation peut être placée sur une seule ligne. Cependant, cette forme d d'initialisation est limitée en raison de sa simplicité. Si nécessite une certaine logique (par exemple, la gestion des erreurs ou une boucle pour remplir un tableau complexe), l'affectation simple est inadéquate. Les variables d'instance peuvent être initialisées dans des constructeurs, où la gestion des erreurs ou d'autres logiques peuvent être utilisées. d'erreur ou d'autres logiques peuvent être utilisées. Pour offrir la même possibilité pour les variables de classe, le langage de programmation Java inclut des blocs d'initialisation statiques.

Vous pouvez donc facilement utiliser la technique d'initialisation en une ligne lorsque le processus est simple. Pour les choix d'initialisation complexes, les constructeurs sont la solution.

2voto

Prasad Kharkar Points 7611

Si vous attribuez une valeur à une variable de la classe, lors de la création d'une instance de la classe, la valeur souhaitée sera directement attribuée à la variable.

Si vous attribuez des valeurs dans le constructeur, une valeur par défaut sera d'abord attribuée à vos variables, puis les valeurs des constructeurs seront attribuées.

Lire la suite les blocs d'initialisation, les constructeurs et leur ordre d'exécution

En cas de bonnes pratiques,

  • Si la transmission de toutes les valeurs au costructeur est nécessaire lors de la création de l'objet, l'initialisation par construction doit être utilisée.
  • Si certaines valeurs doivent être définies par défaut pour chaque objet, vous pouvez les assigner en dehors des constructeurs.

1voto

Yusuf Jakoet Points 136

Utiliser un bloc d'initialisation. Initialisation des champs

public class X {

  // The following is the initializer block
  {
  }

  public X() {
  }
}

0voto

Aniket Thakur Points 10135

Les variables d'instance se voient attribuer des valeurs par défaut au cas où vous n'en attribueriez pas ! Par défaut, la valeur false est attribuée aux variables d'instance booléennes.

public class HelloWorld {

    boolean b;

    public void printData() {
        System.out.println("Defualt boolean value is " + b);
    }

   public static void main(String args[]) {
    HelloWorld hw = new HelloWorld();
    hw.printData();
    }
}

et la sortie est Defualt boolean value is false .

L'endroit où vous affectez votre variable est un choix purement conceptuel.

0voto

Les deux sont presque identiques.

Mais une ligne efficace de documents

. Les variables d'instance peuvent être initialisées dans les constructeurs, où la gestion des erreurs ou d'autres logiques peuvent être utilisées.

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