Java17特性

简述

SpringBoot3.x已发布,Java8从发布到现在也已经有了快10年的时间了,而SpringBoot3.x支持的最低JDK的版本也是Java17了。

对于框架的版本升级,我们关注的不只是版本号的改变还有框架本身的改变,还要关注升级后的框架对其他框架以及核心Java版本的支持情况。

对于新技术新框架的出现和迭代,对于开发人员来说,更多的还是学习成本的提高,随着框架的迭代和软件技术领域的发展,开发人员和软件公司不可能一直使用旧的版本来开发软件,这样以来也就大大提高了开发人员的学习成本。

Java9 ~ Java17 特性

var关键字

var关键字:更简洁的方式声明局部变量

// java 8
Map<String, List<MyDtoType>> myMap = new HashMap<String, List<MyDtoType>>();
List<MyDomainObjectWithLongName> myList = aDelegate.fetchDomainObjects();

//var 语法特性
var map = new HashMap<String, String>();
var list = new LinkedList<>(List.of("zs"));
var anyMatch = list.stream().anyMatch((var s) -> s.equals("zs"));
if (anyMatch) {
    System.out.println(anyMatch);
}
Switch的简化

可以看出对Switch语句做了很大的优化

public static void main(String[] args) {
    //对Switch语句的简化操作
    DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek();
    var freeDay = switch (dayOfWeek) {
        case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> false;
        case SATURDAY, SUNDAY -> true;
    };
    System.out.println("今天是否是工作日:" + (freeDay ? "否" : "是"));

    // 可以使用yield 来返回结果
    freeDay = switch (dayOfWeek) {
        case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> {
            System.out.println("Work work work");
            yield false;
        }
        case SATURDAY, SUNDAY -> {
            System.out.println("Yey, a free day!");
            yield true;
        }
    };
    System.out.println("今天是否是工作日:" + (freeDay ? "否" : "是"));

    System.out.println(formatterPatternSwitch(null));
    System.out.println(formatterPatternSwitch("1"));
    System.out.println(formatterPatternSwitch(2));
    System.out.println(formatterPatternSwitch(3L));
    System.out.println(formatterPatternSwitch(4.0));
    System.out.println(formatterPatternSwitch(new AtomicLong(5)));
}
/*****************************【以下为预览功能】******************************/
// 可以根据传入的类型做判断,并打印输出内容(类似于 instanceof )
static String formatterPatternSwitch(Object o) {
    return switch (o) {
        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 String
            s -> String.format("String %s", s);
        default -> o.toString();
    };
}
// 可以看到,switch不只是类型自动转换,还可以直接判断是否是null
static String formatterPatternSwitch2(Object o) {
    return switch (o) {
        case null -> "null";
        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 String s -> String.format("String %s", s);
        default -> o.getClass().getSimpleName() + " " + o;
    };
}
instanceof实例匹配

instanceof:对于if…else…中也做了优化,可以直接使用类型转换变量

// Java8 写法
if (obj instanceof MyObject) {
  MyObject myObject = (MyObject) obj; // 强制转换
}

//Java17写法,可以在 if 语句中声明变量,并使用该变量
Object object = new MyObject();
if (object instanceof MyObject myObject && myObject.isTrue()) {
    String result = myObject.run();
    System.out.println("result = " + result);
}
class MyObject {
    public String run() {
        System.out.println("run");
        return "我执行完成了";
    }
    public boolean isTrue() {return true;}
}
“”“ ”“”文本块

对于这种 String str = "我又来写BUG了,又是难忘的一天。"

String str = """
    我又来写BUG了, \
    又是难忘的一天。
    """;
    System.out.println(str);    // 我又来写BUG了,又是难忘的一天。( \表示文本不换行)

str = """
    我又来写BUG了, 
    又是难忘的一天。
    """;
    System.out.println(str);    // 对于没有 \ 的文件将会换行显示
Files快速写入文件

必须保证E:/temp/test.txt该文件的存在,否则会抛出异常

// 第一种,使用Path
Path of = Path.of("E:/temp/test.txt");
// 写入文本
Path writeString = Files.writeString(of, "这是一段文本", StandardCharsets.UTF_8);
// 读取文本
String string = Files.readString(writeString, StandardCharsets.UTF_8);
System.out.println(string);

// 第二种,使用Paths
Path temp = Paths.get("E:/", "temp", "test.txt");
// 写入文本
Path path = Files.writeString(temp, "Pretius Rules All !");
// 读取文本
String fileContent = Files.readString(path);
System.out.println(fileContent);
以及其他特性
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值