Photo by Ibrahim Mushan on Unsplash
Java 10 局部变量类型推断
author's avatar
igaozp
未来已来,只是分布不均

Java 10 引入了 var 保留类型来实现局部变量推断。为了兼容旧版本,var 不是关键字,而是一个保留类型,仍然可以使用 var 作为为变量和函数名。

与 JavaScript 不同,使用 var 修饰的变量仍然是静态类型,并不是与 JavaScript 类似的动态类型,变量的类型在编译期已经确定,不能像动态类型语言一样在运行时随意改变变量的类型,所以 var 的引入使代码更加简洁易读。

我们可以写出这样的代码:

var i = 0;
var s = "123";
var list = new ArrayList<Integer>();
var map = Map.of(1, "a", 2, "b");
for (var entry: map.entrySet()) {
    System.out.println(entry);
}
for (var j = 0; j < 10; j++) {
    System.out.println(j);
}

使用 var 声明的变量时必须要在声明的同时初始化:

var a; // error: 'var' on variable without initializer
a = 0;

同时 var 不能用于局部变量声明以外的地方,例如:

public class LocalVariableTypeInference {
    var num = 0; // error: 'var' is not allowed here

    public LocalVariableTypeInference(var i) { // error: 'var' is not allowed here
        try {

        } catch (var e) { // error: 'var' is not allowed here

        }
    }

    var toString() { // error: 'var' is not allowed here

    }
}

也不能使用 var 将变量初始化为 null