使用 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) {
System.out.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
不能用于字段,也不能用于方法或构造函数参数。- 编译器必须能够在声明变量时选择一个类型。由于
null
没有类型,因此变量必须具有初始化器。
遵循这些限制,以下类无法编译,因为无法将 var
用作字段或方法参数的类型标识符。
public class User {
private var name = "Sue";
public void setName(var name) {
this.name = name;
}
}
以下代码也是如此。
在这种情况下,编译器无法推断出 message
的实际类型,因为它缺少初始化器。
public String greetings(int message) {
var greetings;
if (message == 0) {
greetings = "morning";
} else {
greetings = "afternoon";
}
return "Good " + greetings;
}
上次更新: 2021 年 9 月 23 日