Comme tout le monde le sait, Java suit les paradigmes de l'orientation d'objet, où l'encapsulation de données dit que les champs (attributs) d'un objet doivent être masqués pour le monde extérieur et accessibles uniquement via des méthodes ou que les méthodes sont la seule interface de la classe pour l'extérieur. monde. Alors, pourquoi est-il possible de déclarer public un champ en Java, ce qui irait à l’encontre du paradigme de l’encapsulation des données?
Réponses
Trop de publicités?Je pense que c'est possible parce que chaque règle a son exception, toutes les meilleures pratiques peuvent être remplacées dans certains cas.
Par exemple, j'ai souvent exposer public static final de membres de données publiques (par exemple, les constantes). Je ne pense pas que c'est nocif.
Je vais souligner que cette situation est vraie dans d'autres langues en plus de Java: C++, C#, etc.
Langues pas toujours besoin de nous protéger de nous-mêmes.
Dans Oli exemple, où est le mal si j'écris de cette façon?
public class Point {
public final int x;
public final int y;
public Point(int p, int q) {
this.x = p;
this.y = q;
}
}
Il est immuable et thread-safe. Les membres de données peut être public, mais vous ne pouvez pas leur faire du mal.
D'ailleurs, c'est un sale petit secret que le "privé" n'est pas vraiment privé en Java. Vous pouvez toujours utiliser la réflexion pour obtenir autour d'elle.
Alors détendez-vous. Il n'est pas si mauvais.
Parce que "l'encapsulation de données" rigide n'est pas le seul paradigme, ni une caractéristique obligatoire de l'orientation d'objet.
Et, plus précisément, si un attribut de données a une méthode de définition publique et une méthode de lecture publique, et que les méthodes ne font rien d’autre que définir / obtenir l’attribut, quel est l’intérêt de le garder privé?
Discuter sur le bon côté des variables publiques... Comme ça... :)
Il peut y avoir de nombreuses raisons pour utiliser public
variables. Nous allons vérifier un par un:
Performance
Bien que rare, il y a certaines situations dans lesquelles il le faut. La surcharge de l'appel de la méthode devra être évitée dans certains cas.
Constantes
Nous pouvons utiliser les variables par des constantes, qui ne peut pas être modifié après qu'il est initialisé dans le constructeur. Il contribue à la performance. Ces derniers peuvent parfois être constantes statiques, comme la chaîne de connexion à la base de données. Par exemple,
public static final String ACCEPTABLE_PUBLIC = "Acceptable public variable";
D'Autres Cas
Il existe des cas où public
ne fait pas de différence ou d'avoir un getter et setter est inutile. Un bon exemple avec Point
est déjà écrit comme réponse.