2010-08-16 15 views

Respuesta

22

Sin

Si no tiene sentido para crear una instancia de la clase sin proporcionar ninguna información al constructor a continuación, no es necesario tener un constructor sin argumentos.

Un buen ejemplo es la clase java.awt.Color, cuyos todos los ctors están argumentados.

+7

otro buen ejemplo - tipos inmutables. –

+1

@andy Esto merece una respuesta propia. – Trillian

+1

Un contraejemplo: Java Beans - http://en.wikipedia.org/wiki/Java_Beans#JavaBean_conventions –

10

No, no tiene sentido para crear siempre cero constructores de argumentos, los siguientes escenarios son ejemplos en los que tiene sentido para proporcionar al menos un argumento-alguna-constructor

  1. dependencias necesarias que la clase sí mismo no puede crear.
  2. No hay valores predeterminados razonables para las propiedades.

casos en que quiera tener/necesita un constructor sin argumentos:

  1. Usted quiere cumplir con la especificación JavaBeans (que tiene sentido para objetos de datos simples).
  2. Todos los campos se pueden inicializar utilizando valores predeterminados razonables.
  3. Desea utilizar un marco que lo necesite.

Uno de los malos argumentos para tener un constructor de argumento cero en mi opinión es una larga lista de argumentos. Para eso hay mejores soluciones que aceptar inicializar un objeto que no está en un estado seguro después de la creación:

  1. Usando el patrón de Constructor.
  2. Proporcionar objetos contenedores especializados para configurar una instancia a través del constructor.
  3. Proporcione constructores múltiples donde los argumentos base de cada uno son los parámetros requeridos que no pueden tener valores predeterminados asignados.
3

No. Sin embargo, existen excepciones. Por ejemplo, si pretende que su clase contenga solo métodos de utilidad estáticos o una clase singleton o una clase con solo constantes, debe crear un constructor privado sin argumentos para evitar que se cree una instancia explícita.

4

Como ya se ha señalado Andy Thomas-Cramer, es incluso imposible:

class NeedsToBeImmutable { 
    // For a class to be immutable, its reachable state 
    // MUST be reached through a final field 
    private final String stuff; 

    //!!Compile error!! 
    public NeedsToBeImmutable(){} 

    public NeedsToBeImmutable(String stuff){ 
    this.stuff = stuff; 
    } 
    //getters... 
} 
+1

¿Deberíamos tener siempre un constructor de cero argumentos? No. ¿Es siempre posible? Sí, pero a menudo indeseable. public NeedsToBeImmutable() {stuff = "Hello World"} // no hay error de compilación pero es inútil – emory

Cuestiones relacionadas