Как объявить метод, который не может изменять члены класса в Java? [дубликат]
В C ++ мы используем метод констант, поэтому он не может изменять значения членов класса, но как я могу это сделать в Java? Я попробовал объявить окончательный метод, который был бы эквивалентен константам в C ++, но финальные методы - совсем другое дело. Я хочу создать метод получения, чтобы он не мог изменять значения, а только читал его. Как метод только для чтения.
Ответы
В Java невозможно декларативно запретить методу изменять неокончательные поля. В Java не существует такой вещи, как "корректность констант".
Если поле класса не- final, то его можно изменить любым методом класса.
Обратите внимание, что finalработа с полями и переменными отличается от методов и классов:
finalПоле или переменная является константой. Его значение нельзя изменить после назначения.finalМетод не может быть переопределены дочерними классами.finalon методы не имеет ничего общего с «константностью».finalКласс не может быть продлен.finalна классы не имеет ничего общего с «константностью».
Ваши варианты в Java:
- Сделайте свой класс неизменным (т.е. отметьте все его поля
final). - Просто внимательно напишите свои геттеры (и другие немутаторные методы) :)
Еще одно замечание. Даже в отношении полей и переменных Java finalотличается от C ++ const. Например:
finalпеременные не могут быть изменены после назначения, но вы можете назначить их после объявления. Пример:final int value; if (condition) { value = 1; // Ok! } else { value = 2; // Ok! } value = 3; // Compile error: value already assigned.finalполя класса должны быть назначены - напрямую или из конструктора. Но эти поля могут быть назначены где угодно в конструкторе. В Java нет ничего особенного, как "список инициализаторов" C ++.Объявление поля / переменной / параметра
final Object objв Java примерно эквивалентно (const-) ссылке на неконстантный объект в C ++. Это означает, что вы не можете повторно назначить ссылку , но вы можете изменить сам объект, на который указывает ссылка. Пример:// 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!
Ты не можешь сделать это. Последний метод означает, что его нельзя отменить.