TGViewer
Java Portal | Программирование Java Portal | Программирование @java_iibrary · 11.6K subscribers
Post #1411 2.44K
JDK 21 сопоставление с шаблоном (pattern matching) для switch стало постоянной фичей, а не превью — согласно JEP 441

Теперь можно писать такой switch:

private String format(Number n) {
return switch (n) {
case Integer i -> String.format("int %d", i);
case Long l -> String.format("long %d", l);
case Double d -> String.format("double %f", d);
case null -> "null";
default -> String.format("%s %s", n.getClass().getSimpleName(), n);
};
}


Такой switch-выражение во время выполнения под капотом обрабатывается через объект, созданный с помощью класса SwitchBootstraps.

Пример:

void main() throws Throwable {
print(123);
print(456L);
print(7.89);
print(null);
print(7.89F);
}

private void print(Number n) throws Throwable {
IO.println(format(n));
}

private String format(Number n) throws Throwable {
var lookup = MethodHandles.lookup();

var callsite = SwitchBootstraps.typeSwitch(
lookup,
"",
MethodType.methodType(int.class, Number.class, int.class),
Integer.class, Long.class, Double.class
);

var target = callsite.getTarget();
int result = (int) target.invokeExact(n, 0);

return switch (result) {
case 0 -> { Integer i = (Integer) n; yield String.format("int %d", i); }
case 1 -> { Long l = (Long) n; yield String.format("long %d", l); }
case 2 -> { Double d = (Double) n; yield String.format("double %f", d); }
case -1 -> "null";
default -> String.format("%s %s", n.getClass().getSimpleName(), n);
};
}


Результат выполнения:

int 123  
long 456
double 7.890000
null
Float 7.89


🔥 — знал об этом
👍 — полезно

👉 Java Portal
  • 👍 16
  • 🔥 11
  • 🌭 3
  • 👀 1
More from @java_iibrary
  1. Oct 2, 2026🚀 Spring Boot 4: переименовано свойство преобразования исключений ✅ Было: spring.dao.exce…
  2. Oct 2, 2026Процесс ≠ Поток ≠ Виртуальный поток. Эти понятия часто путают, хотя они решают разные зада…
  3. Oct 1, 2026Когда Java-стектрейс оказался длиннее контекста ИИ 👀 👉 Java Portal
  4. Oct 1, 2026Spring Boot 4: приближение срока истечения SSL-сертификатов больше не меняет статус health…
  5. Sep 30, 2026Почему один и тот же Java-файл .class запускается на Windows, Linux и macOS без перекомпил…
  6. Sep 30, 2026Docker прост, пока всё работает. Но что делать, если контейнер постоянно перезапускается,…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →