Algunas personas piensan que siempre deben encapsular todos los campos utilizando setters/getters. Otros piensan que esta práctica no debe usarse en absoluto.
Si su clase no tiene ninguna lógica para los campos y solo se utiliza como titular, puede omitir el uso de métodos y declarar sus campos como públicos. Este concepto también se llama un objeto de transferencia de datos (o mensajero.) Pero, como regla general, debe utilizar el atributo final para estos campos para que su clase inmutable:
public class TwoTuple<A,B> {
public final A first;
public final B second;
public TwoTuple(A a, B b) { first = a; second = b; }
}
Sin embargo, usted debe/o se recomienda encarecidamente el uso de fijadores/getters:
- en aplicaciones web a veces hay requisitos para usar setters/getters. Ver objetos POJO/JavaBean.
- si su clase se va a utilizar en un entorno concurrente. Consulte Java Concurrency in Practice, Sección 3.2: "Si otro hilo realmente hace algo con una referencia publicada realmente no importa, porque el riesgo de mal uso aún está presente. [7] Una vez que un objeto se escapa, debe suponer que otro la clase o el subproceso pueden, maliciosamente o descuidadamente, hacer un mal uso. Esta es una razón convincente para usar la encapsulación: hace que sea práctico analizar programas para corregir y dificultar más las restricciones de diseño accidentalmente "
- si desea agregar algo de lógica extra cuando usted establece/obtiene valores, debe usar setters/getters. Acabo de leer sobre la encapsulación y sus ventajas.
Mi opinión siempre declara los campos como "final privado" y solo entonces, si es necesario, cambie estas propiedades.
¿Quiere decir que usa getters y setters privados dentro de su clase? – pgras
Sí, en los casos en que el campo es profundamente interno (pero estos son raros). De lo contrario, protegido o público. – Fixpoint
Oh, ** getters y setters privados? Leí mal la pregunta ... luego ignoro mi respuesta. –