使用Var类型标识符

Var 关键字

从 Java SE 10 开始,您可以使用 var 类型标识符声明局部变量。这样做时,您让编译器决定所创建变量的实际类型。一旦创建,该类型就无法更改。
考虑如下示例:

String message = "Hello world!";
Path path = Path.of("debug.log");
InputStream stream = Files.newInputStream(path);

在这种情况下,显式声明三个变量 message、pathstream 的类型是不必要的。
使用 var 类型标识符,前面的代码可以重写如下:

var message = "Hello world!";
var path = Path.of("debug.log");
var stream = Files.newInputStream(path);

一些Var的例子

以下示例展示了如何使用 var 类型标识符使代码更易于阅读。在此示例中,strings 变量被赋予 List<String> 类型,而 element 变量被赋予 String 类型。

var list = List.of("one", "two", "three", "four");
for (var element : list) {
    IO.println(element);
}

在此示例中,path 变量属于 Path 类型,而 stream 变量属于 InputStream 类型。

var path = Path.of("debug.log");
try (var stream = Files.newInputStream(path)) {
    // process the file
}

请注意,在前两个示例中,您使用 var 在 for 语句和 try-with-resources 语句中声明了变量。本教程后续部分将详细讲解这两种语句。

使用Var的若干限制

var 类型标识符的使用存在限制。

  1. 你只能将其用于方法、构造函数和初始化器块中声明的局部变量。
  2. var 不能用于字段,也不能用于方法或构造函数参数。
  3. 编译器必须能在变量声明时选择类型。由于空值没有类型,该变量必须带有初始化表达式。

根据上述限制,以下类无法编译,因为字段或方法参数不能使用 var 作为类型标识符。

public class User {
    private var name = "Sue"; // compiler error

    public void setName(var name) { // compiler error
        this.name = name;
    }   
}

下面的代码也是如此。

public String greetings(int message){
    var greetings; //compiler error
    if (message == 0){
        greetings = "morning";
    } else {
        greetings = "afternoon";
    }
    return "Good " + greetings;
}