资讯专栏INFORMATION COLUMN

JDK10 局部类型推断

ky0ncheng / 3357人阅读

摘要:版本已经支持局部变量推断类型,并且使用方法比较简单,这里使用该进行局部变量类型推断的演示。特性展示局部变量类型推断使用的标识符是代码清单输出结果编译器根据局部变量右边的字符串推断局部变量为类型。

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

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

点击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......

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69008.html

相关文章

  • Java 10 新特性解密,引入类型推断机制,2018 年 3 月 20 日发布

    摘要:目标发布目前有两个主要功能针对局部变量类型推断这将删除大部分对象实例化所需的冗长的包含手动类型信息整合源树的库即不同的库将被合并成一个单一的存储库。特别是,承诺为局部变量实例化引入类型推断机制,并将现有的存储库合并到一个存储库中。 JDK 10 何时发布? JDK 10 是 Java 10 标准版的部分实现,将于 2018 年 3 月 20 日发布,改进的关键点包括一个本地类型推断、一...

    caspar 评论0 收藏0
  • Java 1010个新特性,将彻底改变你写代码的方式!

    摘要:的新特性说了这么多,看都会有哪些特性来改变我们写代码的方式呢局部变量类型推断局部变量类型推断可以说是中最值得注意的特性,这是语言开发人员为了简化应用程序的编写而采取的又一步,如下图所示。 showImg(https://segmentfault.com/img/remote/1460000015356980); Java 9才发布几个月,很多玩意都没整明白,现在Java 10又快要来了...

    ityouknow 评论0 收藏0
  • 猫头鹰的深夜翻译:Java 10的JEP 286-局部变量类型推断

    摘要:在此基础上又向前迈进了一步局部变量类型推断允许开发人员跳过局部变量的类型声明局部变量是指在方法定义,初始化块,循环和其它的如代码块,会推断该局部变量的类型。 前言 之前面试的时候问了我是否了解JDK10的变化,一时回答不出来,所以只回答了JDK8中的函数式编程和流编程。今天看到这篇讲JAVA10的文章,顺便了解一下。 正文 JAVA10的所有新特性请参考这里。在所有的JEP中,JEP-...

    chavesgu 评论0 收藏0
  • Java 10 实战第 1 篇:局部变量类型推断

    摘要:就等于局部变量类型推断使用示例既然叫局部变量类型推断,以只能用在局部变量中,下面给出更多使用示例。,本次局部变量类型推断实战文章就到这里了,后续带来更多的的实战方面的文章。 现在 Java 9 被遗弃了直接升级到了 Java 10,之前也发过 Java 10 新特性的文章,现在是开始实战 Java 10 的时候了。 今天要实战的是 Java 10 中最重要的特性:局部变量类型推断,大家...

    HollisChuang 评论0 收藏0
  • JDK 10 的新特性和增强功能

    摘要:的问题在于,版本号中编码了它和它对之前版本的兼容性信息。但是在六个月节奏的情况下,这些信息都是未知的,在发布前任何事情都可能发生,由此规范下的版本号也会是未知的。程序会对文件的完整性做一个保护,因此修改既可能丢失。 本文是对底部参考资料的整理得到的,由于本人技术水平和英语水平都不是很高,有些词如有翻译错误或句子的理解错误还请指出。 JEP 286 局部变量推断: var 传统的 J...

    yibinnn 评论0 收藏0

发表评论

0条评论

ky0ncheng

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<