Сопоставление с шаблоном переключает несколько случаев

Переключатель сопоставления с шаблоном, доступный в качестве функции предварительного просмотра в Java 18+, является отличной функцией. Кажется, у него есть ограничение, что вы не можете указать несколько случаев при его использовании. Это понятно, но вызывает вопрос о предполагаемом использовании. Ниже приведен фактический код из моего текущего проекта:

@SuppressWarnings("DuplicateBranchesInSwitch")
static boolean numeric(Type type) {
  return switch (type) {
    case IntType ignored -> true;
    case IntegerType ignored -> true;
    case RationalType ignored -> true;
    case RealType ignored -> true;
    default -> false;
  };
}

На самом деле здесь нет проблемы с дублирующимся кодом; просто true написано четыре раза, и это нормально. Тем не менее, Intellij IDEA считает, что повторяющиеся ветки в принципе плохи (и в других формах переключения они действительно таковы, поэтому я оставляю это предупреждение включенным; пару раз он обнаруживал зарождающиеся ошибки), поэтому я в итоге использовал аннотацию, чтобы подавить предупреждение для этого метода.

Является ли это лучшей практикой здесь, используйте аннотацию для подавления предупреждения в определенных случаях на данный момент, пока более поздняя версия IDEA, вероятно, не отключит его для переключателя сопоставления с образцом? Или есть идиома в использовании этой языковой функции, которую я упускаю?

Похоже на странный вариант использования. Не могли бы вы сделать что-то вроде Arrays.asList(IntType.class, IntegerType.class, RationalType.class, RealType.class).contains(type.getClass())?

shmosel 13.02.2023 07:09

Честно говоря, эта функция настолько нова, что «лучшая практика», вероятно, еще не установлена.

Dawood ibn Kareem 13.02.2023 07:09

@shmosel Конечно, в этом случае это сработает одинаково хорошо, но тогда мне нужно будет найти другой, более длинный случай, который послужит примером для вопроса о переключателе сопоставления с образцом.

rwallace 13.02.2023 07:10

@DawoodibnKareem Может и так! Тогда, возможно, этот вопрос может стать частью беседы, в ходе которой мы коллективно выясним передовой опыт.

rwallace 13.02.2023 07:11

Ну, может быть, но это действительно то, что я ожидаю найти на дискуссионном форуме, а не на сайте вопросов и ответов.

Dawood ibn Kareem 13.02.2023 07:12

Было бы неплохо, если бы вы могли сделать case IntType | IntegerType i лайк с catch.

shmosel 13.02.2023 07:28
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

похоже на баг. IntelliJ IDEA 2023.1, которая в настоящее время находится в раннем доступе, будет иметь исправление.

Другие вопросы по теме