Java 中的 var 关键字


Java 是一种静态类型的语言,以其冗长性和严格的类型检查而闻名。但是,随着 Java 10 的发布,引入了一项名为局部变量类型推断的新功能,将 var 关键字引入到语言中,并改变了 Java 开发人员的编码方式。本文将探讨 var 关键字,说明其用例并讨论其对 Java 编码实践的影响。

理解 Java 中的“var”

在 Java 中,传统上,我们需要显式声明我们创建的每个变量的类型。随着 Java 10 中引入 var,这种情况发生了变化。var 关键字允许您声明局部变量而不指定其类型。Java 编译器将根据其初始化程序推断变量的类型。

var name = "Java";
var version = 10;
var list = new ArrayList<String>();

在上面的示例中,name 被推断为 String 类型,version 为 int 类型,list 为 ArrayList 类型。请注意,var 只能用于在方法内部、for 循环和 try-with-resources 语句中声明局部变量。

使用“var”编写更简洁的代码

使用 var 会导致代码更简洁,尤其是在处理复杂的泛型类型时。例如,考虑以下不使用 var 的代码行:

Map<String, List<Map.Entry<String, Integer>>> map = new HashMap<>();

可以使用 var 显着简化此代码:

var map = new HashMap<String, List<Map.Entry<String, Integer>>>();

map 变量的类型由 Java 编译器根据其初始化程序推断得出,从而减少了冗余并提高了代码的可读性。

“var”和集合

在使用集合时,var 通过减少冗长性(尤其是在使用泛型时)而变得非常有用。假设我们有一个字符串列表:

var names = List.of("Alice", "Bob", "Charlie");

names 变量的类型被推断为 List。需要注意的是,虽然 var 通过减少冗长性提高了可读性,但类型信息并没有丢失——变量仍然具有静态类型,并在编译时确定。

循环中的“var”

var 关键字也可用于增强型 for 循环,这在处理复杂的泛型类型时非常有用:

var map = new HashMap<String, Integer>();
// populate map
for (var entry : map.entrySet()) {
   // process entry
}

这里,entry 被推断为 Map.Entry<String, Integer> 类型。

“var”的局限性

虽然 var 是 Java 中一个强大的补充,但必须了解其局限性:

  • var 只能用于声明局部变量。它不能用于字段声明、方法参数或返回类型

  • var 需要初始化程序。您不能在不初始化的情况下声明 var 变量,因为编译器无法推断变量的类型。

  • var 不能与 null 初始化程序一起使用,因为无法推断类型。

  • var 不能用于声明数组类型的变量,但可以用于声明对数组的引用。

var arr = new int[10]; // correct
var[] arr = new int[10]; // incorrect

结论

var 关键字是 Java 语言中一个受欢迎的补充,它提高了代码的可读性并减少了冗长性。它使代码更简洁,尤其是在处理复杂的泛型类型时。尽管如此,必须记住,var 并没有使 Java 成为动态类型的语言。var 变量的类型仍然在编译时进行静态检查。

更新于:2023-07-19

854 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告