java10 新特性 局部变量类型推断

很多人抱怨Java是一种强类型,需要引入大量的样板代码。很明显类型声明往往被认为是不必要的。JDK10之前的 Java代码中,声明一个变量是非常繁琐的:

String str = "abc";
long l = 10L;
boolean b = true;
ArrayList list = new ArrayList();
Stream stream = list.stream();

许多流行的编程语言都已经支持某种形式的局部变量类型推断,如JS(var)。

JDK10局部变量类型推断的使用

JDK10 可以使用 var 进行 局部变量类型推断。

var str = "abc"; // 推断为 字符串类型
var l = 10L; // 推断为long 类型
var flag = true; // 推断为 boolean 类型
var list = new ArrayList(); // 推断为 ArrayList
var stream = list.stream(); // 推断为 Stream

局部变量类型推断使用场景

  1. 局部变量
  2. 循环内
public class demo01var {
    // var x = 10; // 成员变量不能使用var
    public static void main(String[] args) {
        var a = 1;
        var str = "abc";
        var flag = true;
        var list = new ArrayList();
        list.add("aa");
        var stream = list.stream();
        
        for (var s : list) {
              System.out.println(s);
        }
        for (var i = 0; i < 10; i++) {
             var x = 5;
        }
    }
}

局部变量类型推断不能使用场景

  1. 成员变量
  2. 方法参数
  3. 方法返回类型
public class demo01var {
    // var x = 10; // 成员变量不能使用var
    public static void main(String[] args) {
        
    }
    // 参数不能使用var
    // public static void test01(var a) {}
    
    /* 方法返回类型不能使用var
    public static var test02() {
    return true;
    }*/
}

局部变量类型推断注意事项

  1. var 并不是一个关键字,可以作为标识符,这意味着可以将一个变量、方法、包名写成 var 。不过一般情况下 不会有人这么写的,因为这本身就违反了普遍的命名规范。
// var 并不是一个关键字,而是一个保留的类型名称,这意味着可以将一个变量、方法、包名写成 `var`。
public static void test03() {
    var var = 10;
    System.out.println("var = " + var);
}   
  1. var 声明变量的时候必须赋值、不能用于声明多个变量的情况。
// var 不能用来声明没有赋值的变量、不能用于声明多个变量的情况。
public static void test04() {
    // var x = null; // 不行,推断不出到底是什么类型
    int x = 1, y = 2; // 可以
    // var m = 1, n = 2; // 不行
}

小结

我们了解了JDK10之前定义变量是比较繁琐的,通过JDK10的局部变量类型推断定义变量更加的简单。

如何进行局部变量类型推断?

将变量名左边的类型替换成var即可
var i = 3;

什么情况下可以使用局部变量类型推断?

  1. 局部变量
  2. 循环中的变量

你可能感兴趣的:(java10 新特性 局部变量类型推断)