Java SE 9:局部变量为" var"

时间:2020-02-23 14:37:03  来源:igfitidea点击:

在本文中,我们将讨论一些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中的这一新功能,我们将获得以下好处:

  • 避免编写样板代码

  • 提高一些可读性(有时会降低可读性)。

  • 减少代码中的冗长性。