学习使用Java 10的新特性--局部变量类型推断

212 阅读1分钟

Java局部变量类型推理教程展示了Java 10的新功能--局部变量类型推理。类型推断是指编译器从赋值的右侧推断出数据类型的能力。

Java 10

Java 10于2018年3月20日发布。它带来了几个Java增强提案(JEPs)。JEP 286被称为局部变量类型推断。

JEP 296

该文件通过减少与编写Java代码有关的仪式来改善开发人员的体验,同时保持Java对静态类型安全的承诺,允许开发人员省略往往不必要的局部变量类型的清单声明。

它引入了一个新的var 关键字,它可以在赋值操作的左侧使用。Java会自动从赋值的右侧推断出必要的数据类型。

Java本地类型变量推断的例子

在下面的例子中,我们将创建一个简单的Java控制台应用程序,在其中测试这个新功能。

$ wget http://download.oracle.com/otn-pub/java/jdk/10+46/76eac37278c24557a3c4199677f19b62/jdk-10_linux-x64_bin.tar.gz
$ tar xzvf jdk-10_linux-x64_bin.tar.gz
$ mv jdk-10 ~/bin

我们下载Oracle JDK并打开存档。我们把安装目录移到我们选择的一个新目录中。

$ ~/bin/jdk-10/bin/java --version
java 10 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10+46)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10+46, mixed mode)

我们验证Java的版本。

$ mkdir -p src/com/zetcode bin
$ touch src/com/zetcode/JavaNewsEx.java
$ tree
.
├── bin
└── src
    └── com
        └── zetcode
            └── JavaNewsEx.java

我们创建目录结构。

com/zetcode/JavaNewsEx.java

package com.zetcode;

import java.util.List;

public class JavaNewsEx {

    public static void main(String[] args) {

        var name = "Jonathan";
        System.out.printf("The word %s has %d characters%n", 
            name, name.length());

        var age = 34;
        age += 12;

        System.out.println(age);

        var words = List.of("cloud", "fine", "pen", "dog",
            "temper", "sky", "book");

        System.out.println(words);
    }
}

这是该例子的soruce代码。

var name = "Jonathan";

定义了一个新的变量name 。我们使用var 关键字。类型是String ,它是由字符串字面推断出来的。

$ ~/bin/jdk-10/bin/javac -d bin src/com/zetcode/JavaNewsEx.java
$ ~/bin/jdk-10/bin/java -cp bin com.zetcode.JavaNewsEx
The word Jonathan has 8 characters
46
[cloud, fine, pen, dog, temper, sky, book]

我们编译并运行这个例子。

在本教程中,我们使用了Java 10的新特性--局部变量类型推断。