记录
数据承载类,我们通常将其称为 POJO 类 [Plain Old Java Object],然后还有其他本质上是功能性的类。
这些数据携带类的特征预计是:
- 不变的
- 仅用于数据存储或作为载体
为了设置变量的值并获取数据,我们使用了构造函数、getter 和 setter。如果我们希望在直接打印对象时打印对象的数据而不获取一些散列值,则需要重写默认的 toString 方法。要比较在每个属性中具有相同值的两个对象,它们仍然是不相等的,我们也需要重写 equals 方法。
为了避免所有这些额外的方法,引入了 RECORD 的概念并摆脱了所有样板代码。
public record Student(int id, String name, String gender, String contact) {
}
笔记 :
- 默认构造函数在记录中默认不存在,需要显式声明。
2. 值无法更改,因为我们这里没有 setter 并且它是不可变的。
开关语句
从 Java 7 到 17,它在一段时间内发展了很多。
Java 7:
只能将整数传递给 switch 语句:
int val =1;
switch (val) {
Case 1 :
System.out.println("First Option");
break;
Case 2:
System.out.println("Second Option");
break;
default :
System.out.println("Option Not There")
}
Java 8:
可以传递字符串和枚举。
Java 12:
Switch 语句转换为 switch express,我们可以使用箭头函数 break 关键字从 switch 返回一个值。
我们可以使用多个值以防万一。
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
default -> throw new IllegalStateException("Invalid day: " + day);
}
Java 13:
switch 中的break关键字已替换为yield关键字。
Java 17:
- 模式匹配:我们可以匹配模式以防万一。可以传递对象以防万一。
switch (obj) {
case null -> System.out.println("null");
case String s -> System.out.println("String");
case Color c -> System.out.println("Color with " + c.values().length + " values");
case Point p -> System.out.println("Record class: " + p.toString());
case int[] ia -> System.out.println("Array of int values of length" + ia.length);
default -> System.out.println("Something else");
}
Source : https://docs.oracle.com/en/java/javase/18/language/pattern-matching-switch-expressions-and-statements.html
2.守卫模式:
保护模式帮助我们避免 switch 语句中的额外 if 条件。相反,我们可以将条件语句移至 case 标签。
case Triangle t && t.getArea()>2000 -> System.out.println("Triangle with area greater than 2000 is detected");
3. null case:null 在 case 中得到处理。
密封类
当我们想要一个功能介于抽象类[其方法需要实现]和最终类[不能被继承]之间的类时,Java 提出了密封类。
密封类允许我们分类哪些类可以扩展它们。
public class SealedClassExample {
sealed class finalClassExample permits second,third {
}
final class second extends finalClassExample {
}
final class third extends finalClassExample {
}
}
在这里,子类必须是最终的、密封的或非密封的。
因此,这些是 Java 17 中完成的主要增强功能。