首页 > 编程语言 >Java从8到21的语言新特性

Java从8到21的语言新特性

时间:2024-03-16 12:33:23浏览次数:27  
标签:case Java temperature 特性 String return feelsLike unit 21

try-with-resource可以使用既有的变量

// java 9 之前
try (InputStream is = Files.newInputStream(Paths.get("1111"))) {
    // do something
}

// java 9 之后可以这样了
InputStream is = Files.newInputStream(Paths.get("1111"));
try (is) {
    // do something
}

钻石操作符扩展

现在钻石操作符可以和匿名类一起使用:

FooClass<Integer> fc = new FooClass<>(1) {
};

FooClass<? extends Integer> fc0 = new FooClass<>(1) {

};

FooClass<?> fc1 = new FooClass<>(1) {
};

接口私有方法

接口可以包含私有方法,主要用于防止默认方法过长:

interface InterfaceWithPrivateMethods {

    private static String staticPrivate() {
        return "static private";
    }

    private String instancePrivate() {
        return "instance private";
    }

    default void check() {
        String result = staticPrivate();
        InterfaceWithPrivateMethods pvt = new InterfaceWithPrivateMethods() {

        };
        result = pvt.instancePrivate();
    }
}

类型推断var

类型推断仅可用于局部变量和lambda表达式中:

var x = 1;

switch表达式

在此之前:

// 之前
boolean isTodayHoliday;
switch (day) {
    case "MONDAY":
    case "TUESDAY":
    case "WEDNESDAY":
    case "THURSDAY":
    case "FRIDAY":
        isTodayHoliday = false;
        break;
    case "SATURDAY":
    case "SUNDAY":
        isTodayHoliday = true;
        break;
    default:
        throw new IllegalArgumentException("What's a " + day);
}

// 从14开始
boolean isTodayHoliday = switch (day) {
    case "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY" -> false;
    case "SATURDAY", "SUNDAY" -> true;
    default -> throw new IllegalArgumentException("What's a " + day);
};

// 从17开始
static record Human (String name, int age, String profession) {}

public String checkObject(Object obj) {
    return switch (obj) {
        case Human h -> "Name: %s, age: %s and profession: %s".formatted(h.name(), h.age(), h.profession());
        case Circle c -> "This is a circle";
        case Shape s -> "It is just a shape";
        case null -> "It is null";
        default -> "It is an object";
    };
}

public String checkShape(Shape shape) {
    return switch (shape) {
        case Triangle t && (t.getNumberOfSides() != 3) -> "This is a weird triangle";
        case Circle c && (c.getNumberOfSides() != 0) -> "This is a weird circle";
        default -> "Just a normal shape";
    };
}

字符块

String multiline = """
    A quick brown fox jumps over a lazy dog; \
    the lazy dog howls loudly.""";

字符串模板

String interpolationUsingSTRProcessor(String feelsLike, String temperature, String unit) {
    return STR
      . "Today's weather is \{ feelsLike }, with a temperature of \{ temperature } degrees \{ unit }" ;
}

// 或者字串块
String interpolationOfJSONBlock(String feelsLike, String temperature, String unit) {
    return STR
      . """
      {
        "feelsLike": "\{ feelsLike }",
        "temperature": "\{ temperature }",
        "unit": "\{ unit }"
      }
      """ ;
}

也可以带格式化的:

String interpolationOfJSONBlockWithFMT(String feelsLike, float temperature, String unit) {
    return FMT
      . """
      {
        "feelsLike": "%1s\{ feelsLike }",
        "temperature": "%2.2f\{ temperature }",
        "unit": "%1s\{ unit }"
      }
      """ ;
}

参见baeldung的说明。

模式匹配 instanceof

可以在instanceof判断的同时声明新的变量了:

if (obj instanceof String str) {
    int len = str.length();

}

Records

public record User(int id, String password) { };

Sealed Classes (JEP 360)

只允许特定的类继承,配合模式匹配会很好用,即可以确定匹配到所有已知的类型:

public abstract sealed class Person permits Employee, Manager {
}

public final class Employee extends Person {
}

public non-sealed class Manager extends Person {
}

参考:

  1. New Features in Java 14
  2. New Features in Java 17

标签:case,Java,temperature,特性,String,return,feelsLike,unit,21
From: https://www.cnblogs.com/narcissu5/p/18076932

相关文章

  • Java面试题(19)Java元注解之@Retention
    序言@Retention 注解是用来注解的注解,称为元注解,其作用可以简单理解为设置注解的生命周期。@Retention 注解传入的是 RetentionPolicy 枚举,该枚举有三个常量,分别是 SOURCE、CLASS 和 RUNTIME三者区别如下:SOURCE 代表着注解仅保留在源级别中,编译器将Java文件编译成cl......
  • java企业人事管理系统(ssm框架毕业设计)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义标题:企业人事管理系统的选题背景在现代企业管理中,人力资源作为企业最宝贵的资产之一,其管理效率和效果直接关系到企业的竞争力和发展潜力。传统的人力资源管理方式......
  • java企业日常事务管理系统(ssm框架毕业设计)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在现代商业环境中,企业的日常运营活动日益复杂多变。随着市场竞争的加剧和业务范围的拓展,企业内部的管理任务变得愈加繁重。传统的手工处理方式已无法满足......
  • java企业售后服务管理(ssm框架毕业设计)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在当今市场竞争日益激烈的环境下,企业除了注重产品的质量与创新外,越来越重视售后服务管理作为提升客户满意度和忠诚度的重要手段。随着消费者权益意识的增......
  • 访问JavaWeb项目报405错误
     一、问题由来一位朋友最近在学习JavaWeb开发,做测试时出现问题,页面报了405错误,HTTPStatus405?MethodNotAllowed如果是只出现一次,那也还好。主要是这个错误他遇到过多次,第一次就是刚开始学习Servlet的时候,还有一次是在学习文件上传的时候出现的。因此就特意写一篇博......
  • springboot/java/php/node/python农产品销售系统小程序【计算机毕设】
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的迅猛发展,传统农产品销售模式正逐步向线上转移。小程序作为移动互联网的一种轻量级应用,因其开发成本低、传播快、使用方便等特点,成为连接......
  • java毕设安卓基于安卓的图库管理系统(开题+源码)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着移动互联网技术的快速发展和智能手机普及率的不断攀升,人们对于移动设备上信息管理和共享的需求日益增长。安卓作为目前全球最受欢迎的移动操作系......
  • java毕设安卓基于安卓的汽车租赁系统的设计与实现(开题+源码)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着科技的飞速发展,移动互联网已经渗透到我们生活的方方面面,其中,移动应用在汽车租赁行业中扮演着日益重要的角色。近年来,汽车租赁市场呈现出蓬勃的发......
  • jdk1.8新特性——lamdba表达式
    如果方法有返回值且方法体中只有return这一行代码,return可省略,如果不写,必须随同花括号一起省略publicclassTest01{publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{TestInterfacetestInterface=(a,b)->a+b;......
  • NOI2021 轻重边 题解
    NOI2021轻重边题目链接:#4812.[NOI2021]轻重边前置知识:#树链剖分#线段树题目大意给定\(n\)个点组成的树,\(m\)次操作。修改操作会让路径\(a\tob\)上的所有点的所有连边对答案的贡献变为\(0\),路径\(a\tob\)的所有边的贡献变为\(1\);查询操作则统计路径\(a\tob\)的......