¿Debería cada clase Java tener un constructor de argumentos cero?¿Deberíamos siempre tener un constructor de cero argumentos en una clase?
Respuesta
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.
otro buen ejemplo - tipos inmutables. –
@andy Esto merece una respuesta propia. – Trillian
Un contraejemplo: Java Beans - http://en.wikipedia.org/wiki/Java_Beans#JavaBean_conventions –
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
- dependencias necesarias que la clase sí mismo no puede crear.
- No hay valores predeterminados razonables para las propiedades.
casos en que quiera tener/necesita un constructor sin argumentos:
- Usted quiere cumplir con la especificación JavaBeans (que tiene sentido para objetos de datos simples).
- Todos los campos se pueden inicializar utilizando valores predeterminados razonables.
- 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:
- Usando el patrón de Constructor.
- Proporcionar objetos contenedores especializados para configurar una instancia a través del constructor.
- Proporcione constructores múltiples donde los argumentos base de cada uno son los parámetros requeridos que no pueden tener valores predeterminados asignados.
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.
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...
}
¿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
- 1. ¿Deberíamos siempre incluir un constructor predeterminado en la clase?
- 2. ¿Cómo tener cero negativo siempre formateado como cero positivo en una cadena de python?
- 3. ¿Podemos tener un constructor privado en una clase estática?
- 4. ¿Deberíamos siempre anular iguales?
- 5. ¿Es aceptable tener un parámetro en el constructor de clase?
- 6. En .NET ¿una clase puede tener constructor virtual?
- 7. ¿Es bueno tener un constructor en clase abstracta?
- 8. Usando Java Reflection, ¿cómo obtener el constructor de una clase especificando una clase derivada de los argumentos del constructor?
- 9. ¿Es un constructor siempre un objeto de función?
- 10. La herencia de una clase con argumentos de constructor en Java
- 11. macros variadic con cero argumentos
- 12. Asignación de campos enteros/propiedades a cero en un constructor
- 13. ¿Cómo puede una DLL tener cero exportaciones?
- 14. La división entera siempre cero
- 15. Heredar argumentos de constructor padre
- 16. Creación de una clase LinkedList desde cero
- 17. C++ constructor de clase de llamada con argumentos calculados
- 18. Inyección de constructor con otros argumentos de constructor, sin dependencia
- 19. StructureMap Especificación de argumentos de constructor explícitos
- 20. de plantillas C++ Clase constructor con argumentos variables
- 21. ¿Deberíamos atrapar siempre una Excepción, envolverla y pasarla?
- 22. C++ - ¿Cómo inicializo un constructor de una clase separada del constructor de una clase?
- 23. Python constructor de la clase con los argumentos por defecto
- 24. ¿Deberíamos declarar un constructor público cuando la clase se declara como paquete privado?
- 25. ¿Puede una subclase heredar también el constructor de la clase padre, o debe tener cada clase su propio constructor?
- 26. Autocablear solo ciertos argumentos de un constructor
- 27. ¿NULL siempre es cero en C?
- 28. ¿Puede una Java Enum tener más de un constructor?
- 29. ¿Cuántos argumentos de constructor son demasiados?
- 30. NSMutableContacto de matriz siempre devuelve cero
sólo dentro de ciertos marcos – Woot4Moo