JDK10 局部类型推断

JDK10 局部变量类型推断(一)

JDK10 Local-Variable Type Inference

想要体验 JDK10 局部变量类型推断,可以选择Eclipse Oxygen或者Intellij IDEA 2018.1.1,但是目前(2018.4.10)来看Eclipse Oxygen官方没有给出原生支持,只能通过插件的方式来体验 Java 10 Support for Oxygen,而且还有部分bug,详情请参考该插件的issue。

Intellij IDEA 2018.1.1版本已经支持JDK10 局部变量推断类型,并且使用方法比较简单,这里使用该IDE进行JDK10
局部变量类型推断的演示。

Intellij IDEA 2018.1.1启用局部变量推断

首先你要安装JDK10,JDK10下载地址。
然后安装完最新版本IDEA之后,新建一个Java Project,进入项目界面之后,选择 Project Structure

JDK10 局部类型推断_第1张图片

然后选择已经安装好的 JDK10
JDK10 局部类型推断_第2张图片

在下拉列表中选择 10-Local variable type inference
JDK10 局部类型推断_第3张图片

点击OK之后,就可以体验JDK10 局部变量类型推断的特性了。

特性展示

1. 局部变量类型推断使用的标识符是 var

代码清单 1-1

/**
 * Local-Variable Type Inference
 */
public class Main {

    public static void main(String[] args) {
        var str = "HelloWorld";
        System.out.println(str);
    }

}

输出结果

HelloWorld

编译器根据局部变量右边的字符串"HelloWorld",推断局部变量strString类型。

代码清单 1-2

import java.util.ArrayList;

/**
 * Local-Variable Type Inference
 */
public class Main {

    public static void main(String[] args) {
        var list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.stream().forEach(System.out::println);
    }

}

输出结果

1
2
3

编译器根据局部变量右边的ArrayList,推断局部变量listArrayList类型。

为了说明以下她的优点我们看看JDK10之前的版本是如何声明的

代码清单 1-3

import java.util.ArrayList;
import java.util.List;

/**
 * Local-Variable Type Inference
 */
public class Main {

    public static void main(String[] args) {
        List list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.stream().forEach(System.out::println);
    }

}

输出结果

1
2
3

与代码 1-2 对比,好处是比较明显的她避免的信息的信息冗余,让代码不再那么啰嗦,另外还有一点是对其了变量名,方便程序的阅读,不过这一点可能不是那么重要如果你不在乎的话。

举两个例子:

代码清单 1-4


/**
 * Local-Variable Type Inference
 */
public class Main {

    public static void main(String[] args) {
        ThisIsATestForJDK10LocalVariableTypeInference a = new ThisIsATestForJDK10LocalVariableTypeInference();
        var b = new ThisIsATestForJDK10LocalVariableTypeInference();
    }

}

class ThisIsATestForJDK10LocalVariableTypeInference {

}

对比以上两种类的定义,效果应该来说是比较明显的。
第二个例子是关于变量名对齐

代码清单 1-5

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/**
 * Local-Variable Type Inference
 */
public class Main {

    public static void main(String[] args) {
        int a = 1;
        ArrayList b = new ArrayList<>();
        Map c = new HashMap<>();
        String d = "HelloWorld";
        
        
        var a_1 = 1;
        var b_1 = new ArrayList();
        var c_1 = new HashMap();
        var d_1 = "HelloWorld";
    }

}

对比该类中,上下两种定义方式,应该说第二种方式阅读起来更加方便。(ps:这里的变量声明的命名不规范)

2. 标识符var 是保留字而不是关键字

不能使用var作为类名,但可以作为变量名,方法名等。

代码清单 1-5

/**
 * Local-Variable Type Inference
 */
public class Main {

    public static void main(String[] args) {
        var var = 10;
    }

    public void var() {

    }
}

未完待续......
To Be Continued......

你可能感兴趣的:(intellij-idea,jdk,特性,java10,java)