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”编写更简洁的代码
使用 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 关键字也可用于增强型 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 变量的类型仍然在编译时进行静态检查。