Java18的新特性 助力开发者高效开发
2024-02-09 00:52:47
Java 18 是 Java 编程语言的最新版本,于 2023 年 3 月 21 日发布。它包含了许多新特性和增强功能,旨在提高开发者的生产力和代码质量。
1. Lambda 表达式
Lambda 表达式是一种匿名函数,可以作为参数传递给其他函数或存储在变量中。它们使代码更加简洁和易读,并可以提高性能。
// 传统写法
Comparator<Integer> comparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
};
// Lambda 表达式写法
Comparator<Integer> comparator = (o1, o2) -> o1 - o2;
2. 记录类
记录类是一种轻量级的类,主要用于表示不可变的数据。它们与普通类非常相似,但具有更简单的语法和更少的限制。
public record Person(String name, int age) {
// 构造函数
public Person {
if (name == null || name.isBlank()) {
throw new IllegalArgumentException("Name cannot be null or blank");
}
if (age < 0) {
throw new IllegalArgumentException("Age cannot be negative");
}
this.name = name;
this.age = age;
}
// 获取姓名
public String getName() {
return name;
}
// 获取年龄
public int getAge() {
return age;
}
// 重写 equals 方法
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return name.equals(person.name) && age == person.age;
}
// 重写 hashCode 方法
@Override
public int hashCode() {
return Objects.hash(name, age);
}
// 重写 toString 方法
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
3. 模式匹配
模式匹配是一种新的语法结构,允许开发者在代码中使用模式来匹配数据。这使得代码更加简洁和易读,并可以提高性能。
switch (fruit) {
case "apple":
System.out.println("This is an apple");
break;
case "banana":
System.out.println("This is a banana");
break;
case "orange":
System.out.println("This is an orange");
break;
default:
System.out.println("This is not a fruit");
}
4. 开关表达式
开关表达式是一种新的语法结构,允许开发者使用表达式来控制开关语句。这使得代码更加简洁和易读,并可以提高性能。
int number = 5;
String result = switch (number) {
case 1:
return "One";
case 2:
return "Two";
case 3:
return "Three";
default:
return "Other";
};
5. 文本块
文本块是一种新的语法结构,允许开发者在代码中使用多行字符串。这使得代码更加简洁和易读,并可以提高性能。
String text = """
This is a multiline string.
It can span multiple lines.
And it can contain special characters, like " and \.
""";
6. 增强型 switch 语句
增强型 switch 语句是一种新的语法结构,允许开发者在 switch 语句中使用 yield 来返回结果。这使得代码更加简洁和易读,并可以提高性能。
int number = 5;
String result = switch (number) {
case 1:
yield "One";
case 2:
yield "Two";
case 3:
yield "Three";
default:
yield "Other";
};
7. 实例化数组
Java 18 中允许使用 var 关键字来声明和初始化数组。这使得代码更加简洁和易读,并可以提高性能。
int[] numbers = {1, 2, 3, 4, 5};
// Java 17 及更早版本
int[] numbers = new int[] {1, 2, 3, 4, 5};
// Java 18
var numbers = {1, 2, 3, 4, 5};
8. 本地变量类型推断
Java 18 中允许使用 var 关键字来声明本地变量,编译器会自动推断变量的类型。这使得代码更加简洁和易读,并可以提高性能。
// Java 17 及更早版本
int number = 5;
// Java 18
var number = 5;
9. sealed 类
sealed 类是一种新的类修饰符,它允许开发者限制哪些类可以继承它。这使得代码更加安全和易于维护。
sealed class Shape {
// 子类
static final class Circle extends Shape { ... }
static final class Square extends Shape { ... }
static final class Triangle extends Shape { ... }
}
10. 接口增强
Java 18 中对接口进行了许多增强,包括默认接口方法、静态接口方法和私有接口方法。这些增强使得接口更加灵活和强大。
// 默认接口方法
interface Shape {
default void draw() {
System.out.println("Drawing a shape");
}
}
// 静态接口方法
interface Shape {
static Shape createCircle() {
return new Circle();
}
}
// 私有接口方法
interface Shape {
private void calculateArea() {
// 计算面积
}
}
11. switch 表达式 preview
12. 文本块三引号字符串 preview
13. 模式匹配 for-each 循环 preview
14. 记录类值初始化预览