疏窗

  • 首页
  • 生活
  • Java
  • Python
  • Golang
  • 其他
  • 归档

  • 搜索
leetcode jdk 生活 nas nosql 数据库 线程 爬虫 中间件

jdk9-17部分新特性使用

发表于 2022-05-24 | 分类于 Java | 0 | 阅读次数 1746

一、jdk17

1.密封类 sealed class

/**
 * Person.class
 * jdk 17 sealed 密封类
 * 可以通过permits指定能够允许继承或实现的子类,避免抽象类被滥用
 * 继承密封类的子类必须用sealed、final、或者non-sealed修饰
 * @author zs
 * @date 2022/5/24
 */
public sealed abstract class Person permits Employee, Manager {


    protected String name;

    protected Integer age;

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    abstract String getPersonInfo();
  
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
/**
 * 继承或实现自密封类的子类必须用sealed、final、或者non-sealed修饰
 * @author zs
 * @date 2022/5/24
 */
public non-sealed class Employee extends Person{

    protected Integer salary;

    public Employee(String name, Integer age,Integer salary) {
        super(name, age);
        this.salary = salary;
    }

    @Override
    String getPersonInfo() {
        return "Employee: " + name + ",age: " + age + ",salary: " + salary;
    }
    public Integer getSalary() {
        return salary;
    }

    public void setSalary(Integer salary) {
        this.salary = salary;
    }
}
public non-sealed class Manager extends Person {
    
    protected String department;

    public Manager(String name,Integer age,String department) {
        super(name,age);
        this.department = department;
    }

    @Override
    String getPersonInfo() {
        return "Manager: " + name + ",age: " + age + ",department: " + department;
    }
    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }
}

2.switch 模式匹配

/**
 * jdk17 switch 模式匹配 当对象类型满足时直接赋值
 * @param person
 */
public static void getPersonInfoSwitch(Person person){
        switch (person){
            case Employee e -> System.out.println(e.getPersonInfo());
            case Manager m -> System.out.println(m.getPersonInfo());
            default -> System.out.println("Unknown person type");
    }
}

二、jdk16

1.record对象

/**
 * jdk 16 record 对象
 * 通过record关键字定义类,可以定义类的属性和方法,并且可以定义类的构造器
 * 是一个final类,不能被继承
 * 并且可以在方法中或者类中声明
 * 成员变量是public的
 * 并且自动实现toString()、equals()、hashCode()方法
 */
public record Phone(String name,Double price) {
    public String getPhoneInfo(){
        return "Phone: " + name + ",price: " + price;
    }
}

三、jdk15

1.文本块

  #jdk15之前的写法
  String str = "SELECT column_name,column_name\n" +
                "FROM table_name\n" +
                "WHERE column_name operator value; ";
                
  #jdk15的写法
  String longStr = """
                    SELECT column_name,column_name
                    FROM table_name
                    WHERE column_name operator value;
                   """;

四、jdk14

1.instanceof 模式匹配

/**
 * jdk14 instanceof 模式匹配 当对象类型满足时直接赋值
 * @param person
 */
public static void getPersonInfoInstanceof(Person person){
    if(person instanceof Employee employee){
        System.out.println(employee.getPersonInfo());
    }else if(person instanceof Manager manager){
        System.out.println(manager.getPersonInfo());
    }else{
        System.out.println("Unknown person type");
    }
}

五、jdk10

1.var 关键字

/**
 * jdk 10 新增var 关键字,可以根据等式右边自动推导等式左边的类型
 * 注意事项:
 * 1.等式右边必须初始化
 * 2.只能用于定义局部变量
 * 3.不能用于定义成员变量、方法参数、返回类型
 * 4.不能定义复合变量
 */
var employee = new Employee("zs",20,1000);
var manager = new Manager("zs",20,"IT");

六、jdk9

1.快速创建不可变集合

/**
 * jdk 9 新增不可变对象的快捷创建方法
 * 无法使用add、remove、set方法,并且不能存放null值
 * Map.of(k1,v1,k2,v2);
 * List.of(v1,v2,v3);
 * Set.of(v1,v2,v3);
 */
Set<Person> personSet = Set.of(employee,manager);
Map<String,Person> personMap = Map.of(employee.getName(),employee,manager.getName(),manager);
List<Person> personList = List.of(employee,manager);

打赏作者
疯子虾夫 微信支付

微信支付

疯子虾夫 支付宝

支付宝

  • 本文作者: 疯子虾夫
  • 本文链接: https://hefengwei.com/archives/jdk9-17部分新特性使用
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# jdk
Java代理模式
leetcode第九题 回文数
  • 文章目录
  • 站点概览
疯子虾夫

疯子虾夫

24 日志
5 分类
9 标签
RSS
Creative Commons
© 2025 疯子虾夫
由 Halo 强力驱动
|
主题 - NexT.Mist v5.1.4
赣ICP备2024026242号

粤公网安备 44010602005909号