Comment déclarer une méthode qui ne peut pas modifier les membres de la classe en Java? [dupliquer]
En C ++, nous faisons une méthode constante, et donc cela ne peut pas changer la valeur des membres de la classe, mais comment puis-je le faire en Java? J'ai essayé la déclaration de méthode finale, qui serait l'équivalent des consts en C ++, mais les méthodes finales sont une autre chose différente. Je veux créer une méthode getter, donc elle ne peut pas changer les valeurs, seulement la lire. Comme une méthode en lecture seule.
Réponses
En Java, il n'est pas possible d'empêcher de manière déclarative une méthode de modifier les champs non finaux. Il n'y a pas de "const correctness" en Java.
Si un champ de classe est non- final
, il peut être modifié par n'importe quelle méthode de la classe.
Notez que cela final
fonctionne différemment sur les champs et les variables par rapport aux méthodes et aux classes:
- Un
final
champ ou une variable est une constante. Sa valeur ne peut pas être modifiée une fois attribuée. - Une
final
méthode ne peut pas être remplacée par des classes enfants.final
sur les méthodes n'a rien à voir avec "constness". - Une
final
classe ne peut pas être étendue.final
sur les classes n'a rien à voir avec "constness".
Vos options en Java sont:
- Rendez votre classe immuable (c'est-à-dire marquez tous ses champs
final
). - Écrivez simplement vos getters (et autres méthodes non mutantes) attentivement :)
Encore une note. Même sur les champs et les variables, Java final
diffère de celui de C ++ const
. Par exemple:
final
les variables ne peuvent pas être modifiées une fois affectées, mais vous pouvez les affecter après la déclaration. Exemple:final int value; if (condition) { value = 1; // Ok! } else { value = 2; // Ok! } value = 3; // Compile error: value already assigned.
final
Les champs de classe doivent être affectés - soit directement, soit à partir d'un constructeur. Mais ces champs peuvent être assignés n'importe où dans un constructeur. Il n'y a rien de spécial comme la "liste d'initialisation" de C ++ en Java.La déclaration de champ / variable / paramètre
final Object obj
en Java est à peu près équivalente à une référence (const-) à un objet non const en C ++. Cela signifie que vous ne pouvez pas réattribuer la référence , mais vous pouvez modifier l'objet référencé lui-même. Un exemple:// Note that (obsolete) Date class is mutable in Java. final Date myDate = new Date(); myDate = new Date(); // Compilation error: can't reassign a final reference! myDate.setTime(4711); // Ok, mutating referenced object is allowed!
Tu ne peux pas faire ça. La méthode finale signifie qu'elle ne peut pas être remplacée.