Question

J'écris une fonction equals(Object obj) pour une classe. Je vois qu'il est possible d'accéder aux champs privés de obj de l'appelant. Ainsi, au lieu d'utiliser une méthode de lecture:

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

}

Je peux accéder au champ directement:

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

}

Est-ce une mauvaise pratique?

Était-ce utile?

La solution

Non, ce n'est pas. La raison pour laquelle les variables privées et les méthodes ne sont pas accessible à partir d'autres classes est de vous permettre de changer les entrailles de votre classe sans avoir à changer tout le code qui utilise la classe (qui et pour empêcher l'utilisateur de votre classe à partir, par exemple définissant une variable à une valeur qu'il n'a jamais censé avoir).

Si vous utilisez des variables privées d'autres objets qui ne blesse rien, parce que si vous souhaitez restructurer les parties internes de votre classe, vous auriez à changer le code dans la classe de toute façon.

Autres conseils

J'ai tendance à toujours utiliser getters, parce que parfois un getter est non seulement « retour (foo) ». Parfois, ils initialisent les choses si elles sont nulles, ou avoir une journalisation de débogage en eux, ou valider l'état actuel d'une certaine façon. Il est plus cohérent.

Je ne pense pas que c'est une mauvaise pratique, mais une caractéristique de la langue. Il vous permet non seulement de tester equals la façon dont vous le faites, mais il est également utile dans un modèle de prototype pour la création d'objets.

C'est très bien et tout à fait normal. Il est un peu étrange de penser que this peut jouer avec les champs privés de other, mais il est normal parce qu'il n'y a pas de quoi que ce soit de mauvaise façon peut arriver aussi loin que certains tiers pouvoir muck avec les composants internes d'un objet Odp. Toute méthode de la classe Odp peut modifier les membres privés de tout objet Odp, même les non-this, mais c'est très bien puisque toutes ces méthodes peuvent évidemment faire confiance!

Ceci est une duplication de

Pourquoi ne puis-je accéder à mes variables privées de "l'autre" objet directement, dans mes méthode equals (Object o)

Les données privées est accessible par une instance de cette classe, même si une instance de classe A est en train d'accéder aux membres privés d'une autre instance de A. Il est important de se rappeler que que les modificateurs d'accès (privé, protégé, public) contrôlent la classe accès, pas d'accès par exemple

Utilisation de membre privé pour la classe d'entité peut provenir de manière incorrecte le travail de classe proxy. Imaginez mise en veille prolongée créer la classe par requête paresseux. Si vous cochez la variable membre, il retourne null. Mais si vous appelez get (), il va chercher les données de base de données et initialiser le champ.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top