Методы геттеры и сеттеры
Часть раздела Объектно-ориентированное программирование путешествия по Java на Coddy — урок 11 из 87.
Геттеры и сеттеры — это методы, которые обеспечивают контролируемый доступ к приватным полям. Геттер извлекает значение поля, в то время как сеттер изменяет его.
Соглашение об именовании следует стандартному шаблону: префикс get или set, за которым следует имя поля с заглавной первой буквой.
public class Product {
private String name;
private double price;
// Геттер для name
public String getName() {
return name;
}
// Сеттер для name
public void setName(String name) {
this.name = name;
}
// Геттер для price
public double getPrice() {
return price;
}
// Сеттер с валидацией
public void setPrice(double price) {
if (price >= 0) {
this.price = price;
}
}
}Настоящая сила сеттеров заключается в возможности добавления логики валидации. В примере выше setPrice принимает только неотрицательные значения, защищая объект от некорректных данных.
Для полей boolean геттеры обычно используют префикс is вместо get:
private boolean active;
public boolean isActive() {
return active;
}Вы также можете создавать поля только для чтения, предоставляя только геттер, или поля только для записи, предоставляя только сеттер. Это дает вам тонкий контроль над тем, как внешний код взаимодействует с данными вашего объекта.
Задание
ЛегкоДавайте создадим конвертер Temperature, который демонстрирует возможности геттеров и сеттеров с логикой валидации.
Вы создадите два файла для организации вашего кода:
Temperature.java: Определите класс Temperature, который хранит значение температуры в градусах Цельсия. Класс должен иметь:- Приватное поле
celsius(double) - Приватное поле
valid(boolean), которое отслеживает, является ли температура физически возможной - Геттер
getCelsius(), который возвращает значение celsius - Сеттер
setCelsius(), который принимает только значения, равные или превышающие абсолютный ноль (-273.15). Если значение валидно, установитеvalidв true; в противном случае не изменяйте celsius и установитеvalidв false - Геттер
isValid()для логического поля (помните: геттеры для boolean используют префиксis) - Геттер
getFahrenheit(), который конвертирует и возвращает температуру в Фаренгейтах по формуле:(celsius * 9/5) + 32
- Приватное поле
Main.java: Создайте объект Temperature, считайте значение celsius из входных данных, используйте сеттер для его установки, затем выведите, является ли температура валидной, и её эквивалент в Фаренгейтах. Сформируйте вывод в две строки:Valid: trueилиValid: falseFahrenheit: X.X(с одним десятичным знаком)
Вы получите одно входное значение: число типа double, представляющее температуру в градусах Цельсия.
Для форматирования вывода Фаренгейтов до одного десятичного знака вы можете использовать String.format("%.1f", value).
Шпаргалка
Геттеры и сеттеры — это методы, которые обеспечивают контролируемый доступ к приватным полям. Геттер извлекает значение поля, а сеттер изменяет его.
Соглашение об именовании следует стандартному шаблону: префикс get или set, за которым следует имя поля с заглавной первой буквой.
public class Product {
private String name;
private double price;
// Геттер для name
public String getName() {
return name;
}
// Сеттер для name
public void setName(String name) {
this.name = name;
}
// Геттер для price
public double getPrice() {
return price;
}
// Сеттер с валидацией
public void setPrice(double price) {
if (price >= 0) {
this.price = price;
}
}
}Сеттеры могут включать логику валидации для защиты объектов от некорректных данных. В примере выше setPrice принимает только неотрицательные значения.
Для полей типа boolean геттеры используют префикс is вместо get:
private boolean active;
public boolean isActive() {
return active;
}Вы можете создавать поля только для чтения, предоставляя только геттер, или поля только для записи, предоставляя только сеттер.
Попробуйте сами
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double celsiusInput = scanner.nextDouble();
// TODO: Создайте объект Temperature
// TODO: Используйте сеттер, чтобы установить значение celsius
// TODO: Выведите, является ли температура допустимой (формат: "Valid: true" или "Valid: false")
// TODO: Выведите эквивалент в Фаренгейтах (формат: "Fahrenheit: X.X")
// Hint: Используйте String.format("%.1f", value) для одного знака после запятой
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово thisМетодыПоля (атрибуты)Метод-конструкторПерегрузка конструкторовИтоги — Простой калькулятор4Наследование
Основы наследования (extends)Ключевое слово superПереопределение методов (@Override)Цепочка конструкторовКласс ObjectОдиночное и многоуровневое наследованиеПочему нет множественного наследования классовИтоги — Иерархия сотрудников7Специальные методы и класс Object
Метод toString()equals() и hashCode()Метод clone()compareTo() и ComparableИнтерфейс ComparatorПовторение — Кастомная сортировка2Модификаторы доступа и инкапсуляция
Обзор уровней доступаМетоды геттеры и сеттерыСокрытие данныхКлючевое слово finalИтоги — Менеджер банковского счета5Полиморфизм
Основы перегрузки методовПереопределение методов (Run-Time)Upcasting и DowncastingОператор instanceofАбстрактные классы и методыИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция против наследованияАгрегация против композицииВнутренние, вложенные и анонимные классыEnums и методы перечисленийRecords (Java 16+)Sealed-классы (Java 17+)11Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн BuilderПаттерн ObserverПаттерн Strategy3Свойства класса и статические члены
Переменные экземпляра и статические переменныеСтатические методыСтатические блокиКонстанты (static final)Итоги: Счетчик и утилиты6Интерфейсы и абстрактные классы
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовDefault и Static методы в интерфейсахАбстрактные классы vs ИнтерфейсыФункциональные интерфейсыИтоги — Платежная система9Обобщения
Введение в обобщенияОбобщенные классыОбобщенные методыОграниченные параметры типаСимволы подстановки (Wildcards: ?, extends, super)Итоги — Обобщенный контейнер12Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»Паттерн «Итератор»