Loading

【Java基础】Java10 新特性

Java10 新特性

局部变量类型推断

局部变量的显示类型声明,常常被认为是不必须的。

  • 场景一:类实例化时。在声明一个变量时,总是习惯了敲打两次变量类型,第一次用于声明变量类型,第二次用于构造器。
  • 场景二:返回值类型含复杂泛型结构。
  • 场景三:经常声明一种变量,它只会被使用一次,而且是用在下一行代码中。

局部变量类型推断适用情况:

package parzulpan.com.Java10;

import java.util.ArrayList;

/**
 * @Author : parzulpan
 * @Time : 2020-11-30
 * @Desc : Java10 局部变量类型推断
 */

public class LocalTypeInference {
    public static void main(String[] args) {
        //1.局部变量的初始化
        var list = new ArrayList<>();
        list.add("Tom");

        //2.增强for循环中的索引
        for(var v : list) {
            System.out.println(v);
        }

        //3.传统for循环中
        for(var i = 0; i < 10; i++) {
            System.out.println(i);
        }
    }
}

局部变量类型推断不适用情况:

  • 初始值为 null;
  • 方法引用;
  • Lambda 表达式;
  • 为数组静态初始化;
  • 情况1:没有初始化的局部变量声明;
  • 情况2:方法的返回类型;
  • 情况3:方法的参数类型;
  • 情况4:构造器的参数类型;
  • 情况5:属性;
  • 情况6:catch 块。

工作原理:在处理 var 时,编译器先是查看表达式右边部分,并根据右边变量值的类型进行推断,作为左边变量的类型,然后将该类型写入字节码当中

集合新增创建不可变集合的方法

自 Java9 开始,Jdk 里面为集合(List / Set / Map)都添加了 of (jdk9新增)和 copyOf (jdk10新增)方法,它们两个都用来创建不可变的集合。

package parzulpan.com.Java10;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author : parzulpan
 * @Time : 2020-11-30
 * @Desc : Java10 集合新增创建不可变集合的方法
 */

public class CopyOfTest {
    public static void main(String[] args) {
        var list1 = List.of("Tom", "Jerry", "Hei");
        var copy1 = List.copyOf(list1);
        System.out.println(list1 == copy1); // true

        var list2 = new ArrayList<String>();
        var copy2 = List.copyOf(list2);
        System.out.println(list2 == copy2); // false
    }
}

总结,对于 copyOf(A) ,如果 A 本身就是一个可读集合,则 copyOf(A) 返回值即为 A;如果 A 本身不是一个可读集合,则 copyOf(A) 返回值即为 新的可读集合。

总结和练习

posted @ 2020-12-14 10:10  Parzulpan  阅读(106)  评论(0编辑  收藏  举报