JAVA_IIBRARY Telegram 1411
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
Please open Telegram to view this post
VIEW IN TELEGRAM



tgoop.com/Java_Iibrary/1411
Create:
Last Update:

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

BY Java Portal | Программирование


Share with your friend now:
tgoop.com/Java_Iibrary/1411

View MORE
Open in Telegram


Telegram News

Date: |

SUCK Channel Telegram Your posting frequency depends on the topic of your channel. If you have a news channel, it’s OK to publish new content every day (or even every hour). For other industries, stick with 2-3 large posts a week. Write your hashtags in the language of your target audience. “[The defendant] could not shift his criminal liability,” Hui said. The group also hosted discussions on committing arson, Judge Hui said, including setting roadblocks on fire, hurling petrol bombs at police stations and teaching people to make such weapons. The conversation linked to arson went on for two to three months, Hui said.
from us


Telegram Java Portal | Программирование
FROM American