Запись шаблонов в Java без экземпляра или переключателя

Шаблоны записей Java 21 обещают введение деструктуризации в язык Java. Однако, похоже, он тесно связан с сопоставлением с образцом, которое можно использовать только как часть сравнения или в операторах/выражениях.

Рассмотрим следующую запись.

      public record Point(int x, int y) {}

Есть ли способ деструктурировать объект этого конкретного типа без использования или? Следующие попытки деструктурируютpoint. Но код не имеет особого смысла, поскольку ниinstanceofниswitchне нужны, если мы предполагаем нулевую безопасность.

      Point point = new Point(0, 0);

// destructuring with instanceof
if (point instanceof Point(int x, int y)) {
    System.out.printf("Point at (%d,%d)", x, y);
}

// destructuring with switch
switch (point) {
    case Point(int x, int y) -> System.out.printf("Point at (%d,%d)", x, y);
}

1 ответ

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

Я нечасто общаюсь с создателями сопоставления с образцом в Java (вы можете задать им вопросы в списке рассылки amber-dev ), и возможности, появившиеся в Java 21, — это только начало сопоставления с образцом . Мы еще не достигли даже половины того, что они хотят включить в язык сопоставления с образцом. Я не думаю, что мы достигли даже 1/4 балла.

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

Вот как, по их мнению, это может работать: Будущее Java: записи, запечатанные классы и сопоставление с образцом — Хосе Помар .

      Circle circle = ...;

match Circle(var center, var radius) = circle;
// center and radius are binding variables

Ничего из этого не гарантировано, поскольку они не знают наверняка, что все это будет работать так, как они ожидают. Если что-то не подходит для языка, они отказываются это включать. Следовательно, почему ничего из этого не гарантировано. Но есть гораздо больше того, что они собираются попытаться вложить в язык.

Я бы посмотрел остальную часть видео. Они гораздо больше исследуют возможности сопоставления с образцом в Java. И опять же, это еще не все. Если выйдет хотя бы половина того, что они описали, то мы и близко не подошли к середине пути. Будущее Java захватывающее!

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

Обратите внимание, что сопоставлением шаблонов для Java руководит user3553087 . Если он это увидит, то сможет ответить на этот вопрос более подробно, чем я.

Также здесь есть официальный канал Java на YouTube. Они постоянно учат подобным вещам. У них есть отличная серия видео, рассказывающая о Java 21, а также о сопоставлении с образцом в Java.

https://www.youtube.com/@java/videos

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