2010-03-12 2 views

Répondre

6

Oui, lorsque vous avez d'autres constructeurs.

  • Il est nécessaire lorsque vous voulez créer un objet sans passer des paramètres au constructeur.

  • Dans la plupart des cas, il est nécessaire pour la réflexion, en particulier lorsque vous travaillez avec certains par réflexion cadres et des bibliothèques (par exemple sérialisation, Hibernate, Jute).

  • L'utilisation de setters à la place peut généralement vous donner un meilleur contrôle. Il a également fonctionne bien avec l'héritage (où vous auriez besoin d'appeler explicitement le constructeur pour toutes les classes spécialisées, comme les constructeurs ne sont pas virtuel.

8

Si vous avez un constructeur non par défaut, le constructeur par défaut n'est pas implicitement disponible. Il est une bonne idée de ne pas mettre un si elle est votre objectif est de ne pas avoir quelqu'un faire:

MyClass myClass = new MyClass(); 
6

Java ajoute un constructeur public par défaut sans args si vous spécifiez pas d'autres constructeurs donc il y a un point en mettre un si vous en avez besoin et en spécifier un autre. Donc, dans votre cas si vous avez défini votre classe comme ceci:

class MyClass { 
    public MyClass(T someArgs){ 
    //somecode 
    } 
} 

alors vous ne pouviez pas faire:

MyClass a = new MyClass(); 

mais si elle était définie comme ceci:

class MyClass { 
    // no constructors 
} 

vous pourrait.

Souvent, les constructeurs sans argument sont utilisés pour spécifier des arguments pseudo-par défaut. Par exemple:

class Switch { 
    private boolean on; 

    public Switch() { this(true); } 
    public Switch(boolean on) { this.on = on; } 
    public boolean isOn() { return on; } 
    public boolean toggle() { on = !on; } 
    public boolean set(boolean on) { this.on = on; return this.on; } 
} 
0

Certains cadres exigeront que vous avez un zéro . l'argument/constructeur par défaut Par exemple, vous en avez besoin pour exécuter une classe en cas de test JUnit. [modifier: suppression de déclaration incorrecte]

Cela est dû à leur utilisation de la réflexion

+0

Non. Les objets sérialisables n'ont pas besoin de constructeurs par défaut. – EJP

+0

Vous le faites dans certains cas (mais oui, pas tous): http://java.sun.com/j2se/1.5.0/docs/api/java/io/Serializable.html – ama

+0

Lisez-le vous-même. Les classes sérialisables n'ont pas besoin de constructeurs par défaut. Période. C'est la première superclasse non sérialisable qui nécessite un constructeur par défaut. – EJP

3

en plus de tous argum précédent. ents pour le constructeur no-args, c'est un élément obligatoire de JavaBeans, car ces beans peuvent être créés en utilisant la réflexion (en appelant spécifiquement Class.newInstance). En conséquence, tout framework reposant sur JavaBeans fera de ce constructeur no-args une partie obligatoire de votre architecture.

Il y a aussi un avantage supplémentaire, car un constructeur sans-args peut vous aider à introduire une sorte d'interface fluide, en vous permettant d'enchaîner les appels.À titre d'exemple, dans une entreprise où je travaillais, est utilisé pour définir à côté setters et getter avec des méthodes comme celle-ci:

class MyClass { 
    privaite int index; 
    public int getIndex() { return index; } 
    public void setindex(int index) { this.index = index; } 

    public MyClass withIndex(int index) { 
     setIndex(index); 
     return this; 
    } 
} 

Permettant moi de créer des objets de la manière suivante:

MyClass myObject = new MyClass().withIndex(2); 

Ce fut un manière très utile de créer des objets sans définir de constructeurs de bogues.

Questions connexes