Pregunta

Estoy escribiendo una función equals(Object obj) para una clase. Veo que es posible acceder a los campos privados de obj de la persona que llama. Así que en lugar de utilizar un captador:

Odp other = (Odp) obj;
if (! other.getCollection().contains(ftw)) {

}

Sólo puedo acceder al campo directamente:

Odp other = (Odp) obj;
if (! other.collection.contains(ftw)) {

}

¿Es esta mala práctica?

¿Fue útil?

Solución

No, no lo es. La razón por la que las variables y métodos privados no son accesibles desde otras clases es que le permite cambiar el funcionamiento interno de su clase sin tener que cambiar todo el código que utiliza la clase (eso y para evitar que el usuario de la clase de, por ejemplo estableciendo una variable a un valor que nunca se supone que tiene).

Si utiliza variables privadas de otros objetos que no duele nada, porque si lo desea reestructurar partes internas de su clase, que tendría que cambiar el código dentro de la clase de todos modos.

Otros consejos

Yo tiendo a usar siempre captadores, porque a veces un captador no es sólo "retorno (foo)". A veces se inicializan las cosas si son nulos, o tienen algún registro de depuración en ellos, o validar el estado actual de alguna manera. Es más consistente.

No creo que esto es una mala práctica, pero una característica de la lengua. No sólo le permite probar equals la forma de hacer, pero también es útil en un modelo prototipo para la creación de objetos.

Eso está muy bien y completamente normal. Es un poco extraño pensar que this puede jugar con los campos privados de other, pero está bien, porque no hay manera de que nada malo puede suceder por lo que un tercero ser capaz de lodo con las partes internas de un objeto Odp. Cualquier método de la clase Odp puede modificar cualquiera de los miembros privados de cualquier objeto Odp, incluso no this, pero que está bien desde cualquiera de estos métodos, obviamente, se puede confiar!

Esta es una duplicación de

¿por qué puedo acceder a mis variables privadas del "otro" objeto directamente, en mis iguales (Object o) método

Los datos privados se puede acceder en cualquier instancia de esa clase, incluso si una instancia de la clase A está accediendo a los miembros privados de otra instancia de A. Es importante recordar que los que los modificadores de acceso (, protegido, pública y privada) de clase están controlando acceso, no acceso de instancia

El uso de miembro privado para la clase de entidad puede causado el trabajo clase de proxy de forma incorrecta. Imagínese hibernación crear la clase de consulta perezoso. Si marca variable miembro, se devuelve null. Pero si se llama a get (), será obtener los datos de la base de datos e inicializar el campo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top