Java SE 9:局部变量为" var"
在本文中,我们将讨论一些Java SE 9新功能:" var",并提供一些简单而合适的示例。
局部变量的var
Java SE 9附带了" var"来定义和初始化局部变量。
是新关键字吗?我们将在下一节中讨论它。
Java语言中此更改的主要目的是:
- 改善"类型推断"。
- 减少代码中的冗长
- 编写干净的代码
Java SE 6:局部变量
在Java SE 7之前,要初始化局部变量,我们使用以下方法:
例:
Map<String, List<Int>> phoneBook = new HashMap<String, List<Int>>();
其中我们需要在两端定义类型参数。
看起来有些冗长。
Java SE 7:局部变量
Java SE 7引入了Diamond运算符以减少一些详细信息。
它表示为空尖括号:。
我们可以在右侧使用此Diamond运算符来避免两次声明相同类型的参数,如下所示:
例:
Map<String, List<Int>> phoneBook = new HashMap<>();
其中我们通过避免在右侧使用类型参数来减少一些冗长的内容。
但是,我们可以看到仍然有一些详细信息。
Java SE 9:局部变量
为了解决这个冗长的问题,Java SE 9附带了一个新功能:" var",用于定义和初始化局部变量,如下所示:
示例1:
var phoneBook = new HashMap<String, List<Int>>();
Java 9编译器在此处推断出电话簿引用的类型为新的HashMap <String,List <Int >>。
当我们使用这样的var标识符定义局部变量时,编译器会自动推断其类型。
注意:-根据初始化程序的类型来推断类型。
如果没有初始化程序,则初始化程序为空文字,或者初始化程序的类型不是可以归一化为合适的可表示类型的类型。
示例2:
var list = new ArrayList<String>();
Java 9编译器在这里将列表的类型推断为ArrayList <String>,而不是List <String>。
示例3:
var stream = list.stream();
Java 9编译器在这里将列表的类型推断为Stream <String>。
注意:-Oracle Corp.仍在使用此功能,他们尚未就Java SE 9或者将来版本中的此功能的发布确定最终版本。
我们将等待他们的更新。
var是关键字吗?
在Java SE 9中," var"不是关键字。
它是保留类型名称。
这意味着,如果我们现有的代码使用var作为变量名,方法名或者程序包名,则它们对此更改无效。
但是,任何类名或者接口都会影响此更改。
在极少数情况下,不建议使用" var"作为类或者接口名称,因此此更改不会影响现有代码库。
这项改进的优势
由于Java 9中的这一新功能,我们将获得以下好处:
避免编写样板代码
提高一些可读性(有时会降低可读性)。
减少代码中的冗长性。