«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Исследование возможностей сопоставления с образцом с помощью Switch в Java 21

Исследование возможностей сопоставления с образцом с помощью Switch в Java 21

Опубликовано 17 августа 2024 г.
Просматривать:962

Exploring the Power of Pattern Matching with Switch in Java 21

Один из популярных случаев использования сопоставления с образцом с помощью переключателя — это работа с различными типами данных в программе. Рассмотрим следующий пример класса WeatherStation, который имеет разные типы датчиков и возвращает текущую температуру:

`публичный класс WeatherStation {

private Sensor sensor;

 public double getCurrentTemperature() {
    return switch (sensor) {
        case TemperatureSensor t -> t.reading();
        case HumiditySensor h -> h.reading() * 0.9; // apply a 10% moisture correction
        default -> 0.0; // in case of an unhandled sensor type, return 0
    };
}

}
`
Здесь мы видим, что интерфейс датчика используется для выражения селектора, а метки регистра используют шаблоны, основанные на конкретных реализациях датчика: датчик температуры и датчик влажности. Это обеспечивает более краткий и читаемый способ обработки различных типов данных в операторе переключения.

Другой вариант использования сопоставления с образцом с помощью переключателя — это работа с перечислениями. До того, как было введено сопоставление с образцом, перечисления можно было использовать только в качестве констант в метках регистра, что ограничивало значения, которые можно было проверить в операторе переключения. Благодаря новой функции перечисления теперь можно уточнять по меткам регистра, что обеспечивает более точное и гибкое сопоставление.

public enum Direction {
СЕВЕР,
ВОСТОК,
ЮГ,
ЗАПАД
}

public void move(Направление) {
переключатель (направление) {
случай NORTH,NORTH_WEST,NORTH_EAST -> moveUp();
случай EAST,EAST_NORTH,EAST_SOUTH -> moveRight();
case SOUTH,SOUTH_EAST,SOUTH_WEST -> moveDown();
случай WEST,WEST_NORTH,WEST_SOUTH -> moveLeft();
}
}

Здесь метод move() использует оператор переключения, чтобы легко обрабатывать перемещение в разных направлениях на основе указанного значения перечисления Direction. С помощью сопоставления с образцом мы также можем указать комбинации направлений, такие как NORTH_WEST и EAST_SOUTH, что делает наш код более надежным и гибким.

Наконец, давайте посмотрим на пример того, как сопоставление с образцом может помочь при обработке ошибок в операторе переключения. В традиционном переключателе, если выражение селектора не соответствует ни одной из меток регистра, для обработки ошибки можно использовать регистр по умолчанию. Однако это может быть утомительно при работе с несколькими метками регистра и может привести к дублированию кода. При сопоставлении с образцом выдается исключение, если ни один из шаблонов меток регистра не соответствует выражению селектора, что делает обработку ошибок более единообразной и менее подверженной ошибкам.

public String getPlanetaryObject(тело PlanetaryBody) {
переключатель возврата (тело) {
case Planet p && p.getMass() > 1e29 -> p.getName() "является газовым гигантом";
case Planet p && p.getMass() > 1e23 -> p.getName() "является каменистой планетой";
case Star s && s.getLuminosity() > 1e32 -> s.getName() "является яркой звездой";
case Star s && s.getLuminosity() s.getName() "является тусклой звездой";
default -> throw new MatchException("Невозможно определить тип планетарного объекта: " body.getName());
};
}

В этом примере метод getPlanetaryObject() принимает объект PlanetaryBody, который может быть планетой или звездой. Шаблоны, используемые в этикетках корпусов, учитывают дополнительные условия, такие как масса планеты или светимость звезды. Если ни один из шаблонов не соответствует, создается исключение MatchException, что делает обработку ошибок более последовательной и предотвращает любые потенциальные ошибки.

Заключение
Сопоставление шаблонов для переключателей — одна из наиболее важных функций, появившихся в Java в последнее время. Это позволяет создавать более гибкие и лаконичные структуры потока управления.

Повысьте свои навыки работы с Java, пройдя сертификацию профессионального сертифицированного разработчика Java SE 21.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/myexamcloud/exploring-the-power-of-pattern-matching-with-switch-in-java-21-506a?1 Если есть какие-либо нарушения, свяжитесь с Study_golang. @163.com удалить
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3