在JEP455中包含了通过增强switch语句,简化了代码编写,以及提高了代码的可读性。
1.相关优化
- 原始类型模式:您可以int, long, boolean在模式匹配结构中直接使用原始类型(例如 等)。这样就无需对值进行不必要的装箱和拆箱。
- 扩展的instanceof和switch :运算instanceof符和switch表达式已经扩展,可以与原始类型无缝协作。
2.示例
2.1.业务背景
以用户订单服务系统为例。
2.2.实现源码
void main() {
var user = new User(12345L, true); //loggedIn user
startProcessing(OrderStatus.NEW, switch (user.loggedIn()) {
case true -> user.id();
case false -> {
log("Unrecognized user");
yield -1;
}
});
user = new User(0L, false); //not loggedIn user
startProcessing(OrderStatus.NEW, switch (user.loggedIn()) {
case true -> user.id();
case false -> {
log("Unrecognized user");
yield -1;
}
});
}
void startProcessing(OrderStatus orderStatus, long userId) {
switch (userId) {
case -1L -> System.out.println("Unrecognized User. Unable to process order.");
default -> {
var message = switch (orderStatus) {
case NEW -> "Order for User %s is received and will start processing";
case PROCESSING -> "Order for User %s is being processed.";
case DISPATCHED, DELIVERED -> "Order for User %s has already been processed";
};
log(String.format(message, userId));
}
}
}
void log(String message) {
println(message);
}
public enum OrderStatus {
NEW,
PROCESSING,
DISPATCHED,
DELIVERED
}
record User(long id, boolean loggedIn) {
}
2.3.源码解读
创建一个具有 ID 和loggedIn状态的 User 对象。方法内的 switch 表达式startProcessing检查用户是否已登录:
- 如果用户已登录,则使用其 ID 进行处理;
- 如果未登录,则生成一条日志消息,并产生 -1 以指示无法识别的用户。然后 startProcessing 方法使用另一个 switch 语句来处理不同的 OrderStatus 值。
根据订单状态打印适当的消息。
2.4.源码编译及运行
注意:这是一项预览语言功能,可通过 JDK 23 编译器和运行时的 --enable-preview 标志使用。要在 JDK 23 中尝试上述示例,您必须启用预览功能:
- 编译程序javac --release 23 --enable-preview OrderService.java并使用 运行它 java --enable-preview OrderService;
- 使用源代码启动器时,使用 运行程序java --enable-preview OrderService.java;
- 当使用jshell时,用 jshell 启动它–enable-preview。
3.总结
随着 Java 的不断发展,JEP 455 等功能体现了该语言致力于实现现代化和提高开发人员生产力的承诺。利用这些变化可以编写更高效、更易读的代码,并在不断发展的 Java 开发领域保持领先地位。
标签:case,JDK23,loggedIn,--,代码,switch,User,编写,user From: https://blog.csdn.net/nanxiaotao/article/details/139569532