Java 17 特性

记录

数据承载类,我们通常将其称为 POJO 类 [Plain Old Java Object],然后还有其他本质上是功能性的类。

这些数据携带类的特征预计是:

  1. 不变的
  2. 仅用于数据存储或作为载体

为了设置变量的值并获取数据,我们使用了构造函数、getter 和 setter。如果我们希望在直接打印对象时打印对象的数据而不获取一些散列值,则需要重写默认的 toString 方法。要比较在每个属性中具有相同值的两个对象,它们仍然是不相等的,我们也需要重写 equals 方法。

为了避免所有这些额外的方法,引入了 RECORD 的概念并摆脱了所有样板代码。

public record Student(int id, String name, String gender, String contact) {

}

笔记 :

  1. 默认构造函数在记录中默认不存在,需要显式声明。

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:

  1. 模式匹配:我们可以匹配模式以防万一。可以传递对象以防万一。
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 中完成的主要增强功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值