使用Var类型标识符
Var 关键字
从 Java SE 10 开始,您可以使用 var 类型标识符声明局部变量。这样做时,您让编译器决定所创建变量的实际类型。一旦创建,该类型就无法更改。
考虑如下示例:
String message = "Hello world!";
Path path = Path.of("debug.log");
InputStream stream = Files.newInputStream(path);
在这种情况下,显式声明三个变量 message、path 和 stream 的类型是不必要的。
使用 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 类型标识符的使用存在限制。
- 你只能将其用于方法、构造函数和初始化器块中声明的局部变量。
- var 不能用于字段,也不能用于方法或构造函数参数。
- 编译器必须能在变量声明时选择类型。由于空值没有类型,该变量必须带有初始化表达式。
根据上述限制,以下类无法编译,因为字段或方法参数不能使用 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;
}