¿Por qué es una buena práctica marcar una clase con solo constructores privados como final? Mi suposición es que es para que otros programadores sepan que no puede ser subclasificado.constructor privado y final
Respuesta
Hacer una final de clase tiene algo de ganancia de rendimiento (pequeña), porque el compilador JIT puede alinear la funcionalidad de esa clase. No sé si eso califica como 'buena práctica', pero veo las ventajas.
¿No ve el compilador JIT de todos modos si esa clase tiene subclases concretas cargadas y si se anula un método? Imagino que puede alinearse de todos modos en tal caso, independientemente de si la clase/método es declarado 'final' . Por otra parte, no soy un experto en JIT, solo curiosidad :-) –
HotSpot determina si la clase tiene una subclase cargada. No importa si la clase está marcada como "final" o no. –
@Tom, gracias, esto confirma mi sensación :-) –
Quieres decir "una clase con constructor privado" ¿o sí?
Una clase final no se puede subclasificar. Esto puede representar una decisión de diseño. No todas las clases están diseñadas para ser subclasificadas, por lo tanto, si la tuya no lo es, es mejor marcarla explícitamente para evitar errores sutiles más adelante.
Una clase con constructores privados solo no puede ser instanciada por el mundo exterior (ni subclasificada). Esto puede ser útil, por ej. singletons, o clases donde desea controlar qué instancias de la clase se crean. P.ej. antes de Java5, el patrón typesafe enum lo usaba.
Sí, lo vi justo ahora. Lo siento. Eliminé el voto negativo. – Hardcoded
@Hardcoded, no hay problema :-) –
A menudo se considera (por ejemplo, por Josh Bloch y los diseñadores de C#) una buena práctica marcar todo como final a menos que tenga una razón explícita para no hacerlo. Suponiendo que te refieres a la clase, tienes razón en que una clase con solo constructores privados no puede ser subclasificada. Por lo tanto, la final podría considerarse redundante, pero como dices tiene valor para la documentación. Como Marc sugiere, también puede ayudar a la optimización.
"A menudo considerado" por quién? [citación necesitada] –
marca todo como final? Creo que te refieres a variables y parámetros. Pero no es una buena idea marcar todas las clases y métodos como definitivos. Esto limitaría la extensibilidad de su aplicación daramtically. – Hardcoded
@Hardcoded, escribió "marque todo como final ** a menos que tenga una razón explícita para no **". Es decir. solo permite que la extensión de las clases _designed sea extensible_. –
Marcamos la clase como clase final haciendo que el constructor sea privado, para evitar la subclasificación.
Esta es una buena práctica, en los casos en que no queremos que las personas anulen nuestros métodos de clase y cambien la funcionalidad o agreguen las funciones a nuestra clase.
Por ejemplo, las clases String y Math son clases finales, que no podemos extender o subclase, esto es para asegurarnos de que nadie cambie su comportamiento.
Una clase final con constructor privado:
- clase no puede tener subclases, no podemos medida clase final.
- Clase que tiene constructor privado, no podemos crear el objeto de esa clase.
Significa que otros métodos de la clase serán estáticos, por lo que la clase puede acceder a ellos.
- 1. constructor privado
- 2. Uso del modificador final privado de Scala?
- 3. Instanciando clase interna con constructor privado
- 4. Constructor privado en la clase abstracta
- 5. ¿Por qué necesitamos un constructor privado?
- 6. Java Spring Bean con constructor privado
- 7. Java: acceso al constructor privado con parámetros de tipo
- 8. En Java, ¿cómo hago una clase con un constructor privado cuya superclase también tiene un constructor privado?
- 9. Cambiar campos final privado a través de la reflexión
- 10. Clase estática vs. ¿Clases con constructor privado y todas las propiedades y métodos estáticos?
- 11. ¿Cómo puedo acceder a un constructor privado de una clase?
- 12. Debe copiar el constructor sea privado o público
- 13. ¿Por qué puedo llamar al constructor privado desde? Ámbito global?
- 14. se extiende de la clase con constructor privado
- 15. alcance del constructor privado en la clase jerarquizada
- 16. ¿Podemos tener un constructor privado en una clase estática?
- 17. ¿Cómo puedo instanciar una clase que está teniendo constructor privado
- 18. ¿Por qué una enumeración tiene un constructor privado de paquetes?
- 19. ¿Cuál es la necesidad de un constructor privado en C#?
- 20. ¿Por qué no es privado el constructor de String()?
- 21. ¿Puedo usar boost :: make_shared con un constructor privado?
- 22. C++ - ¿Qué está haciendo esto si el constructor es privado?
- 23. Uso de constructor privado para evitar la creación de instancias de clase?
- 24. ¿Puedo hacer que el constructor primario sea privado y mantener abiertos los constructores auxiliares en Scala?
- 25. ¿Se permite RVO cuando un constructor de copia es privado y no está implementado?
- 26. constructor público y constructor estático
- 27. Copy Constructor y constructor predeterminado
- 28. Diferencia entre Dim y Privado
- 29. Diferencia entre static final y static final
- 30. Inicializar la variable final antes del constructor en Java
método -> constructor? ¿No te refieres a una clase? –
s/method/class /? (: – hudolejev
marcando una clase como final, ¿quieres decir? – lindelof