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

clipboard.png

然后选择已经安装好的 JDK10
clipboard.png

在下拉列表中选择 10-Local variable type inference
clipboard.png

点击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<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.stream().forEach(System.out::println);
    }

}

输出结果

1
2
3

编译器根据局部变量右边的ArrayList<Integer>,推断局部变量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<Integer> 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<String> b = new ArrayList<>();
        Map<String, Integer> c = new HashMap<>();
        String d = "HelloWorld";
        
        
        var a_1 = 1;
        var b_1 = new ArrayList<String>();
        var c_1 = new HashMap<String, Integer>();
        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......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值