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

JDK10 局部类型推断相关推荐

  1. java中无法推断类型参数_Java 10中的本地类型推断,或者如果它像鸭子一样嘎嘎叫...

    java中无法推断类型参数 最近,Oracle采用了一种新策略,即每六个月发布一次新的语言版本. 该策略假定只有每个第3版都将提供长期支持或LTS. 快速说明: 具有LTS的当前版本是Java 8: ...

  2. Java 10中的本地类型推断,或者如果它像鸭子一样嘎嘎叫

    最近,Oracle采用了一种新策略,即每六个月发布一次新的语言版本. 该策略假定只有每个第3版都将提供长期支持或LTS. 快速说明: 具有LTS的当前版本是Java 8: Java 9仅应在2018年 ...

  3. Java类型推断将不再支持可变性规范

    Java类型推断是一项推荐的Java特性,允许开发人员使用var关键字代替显式的变量类型声明.最近的报道显示,由于社区内无法就区分可变和不可变变量的实现方式达成一致意见,Java类型推断将不再支持使用 ...

  4. Java 编程问题:四、类型推断

    原文:Java Coding Problems 协议:CC BY-NC-SA 4.0 贡献者:飞龙 本文来自[ApacheCN Java 译文集],自豪地采用谷歌翻译. 本章包括 21 个涉及 JEP ...

  5. Java中的类型推断和lambda表达式

    文章目录 简介 类型的显示使用 Stream中的类型推断 类型推断中变量名字的重要性 类型推断对性能的影响 类型推断的限制 总结 简介 java是强类型的编程语言,每个java中使用到的变量都需要定义 ...

  6. 根据变量推断变量类型_Java A的新本地变量类型推断

    根据变量推断变量类型 对于编程语言迷来说,新闻几乎比这更令人兴奋! 现在,存在状态为"候选"的JEP 286用于本地变量类型推断 . 以及Brian Goetz的反馈请求,我很想邀 ...

  7. Java A的新本地变量类型推断

    对于编程语言迷来说,新闻几乎比这更令人兴奋! 现在有一个状态为"候选"的本地变量类型推断的JEP 286 . 以及Brian Goetz的反馈请求,我很想邀请您参加: http : ...

  8. Effective Modern C++ 第一章 C++11/14/17中的类型推断

    Chapter 1, Deducing Type Item 1: Template type deduction 一些基础知识: 关于左值和右值的一些解释:https://book.2cto.com/ ...

  9. java全局变量和局部变量_Java 10:局部变量类型推断

    java全局变量和局部变量 In this article, we would take a deep dive at the new feature of Local-Variable Type I ...

最新文章

  1. oracle sqlserver 查看指定用户下面的表
  2. 全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<流程挂起与激活篇>
  3. 软件开发python方向_2020年软件开发7大学习方向!
  4. Java之多线程断点下载的实现
  5. effective java读书笔记12:考虑实现Comparable接口
  6. 服务器wifi无线放大器,无线wifi中继放大器的使用方法
  7. 数据结构(C#)_排序算法(冒泡排序)
  8. vue 兼容IE解决方案, Babel .babelrc
  9. hive执行出现问题:Ended Job = job_1667594872527_3123 with errors Error during job, obtaining debugging info
  10. 大量的数据mysql查询最新的记录慢问题
  11. 【实时渲染】屏幕空间特效和多边形技术
  12. 解决 chrome 启动时强制打开2345导航(或其他网址)的方法
  13. 计算机切换输入法Word关闭,win7旗舰版64位系统下word程序无法切换输入法的解决方法...
  14. 通过docker部署一个简单的web服务
  15. 新版曝光骗子公示PHP系统源码+云黑系统
  16. 会声会影2022最新版安装包下载
  17. XigmaNas系统(二):蜗牛星际安装Xigmanas(Nas4Free)
  18. 假如当初知道skycc营销软件是不是比现在好
  19. 全国一级计算机考证报名网站
  20. Python基础知识之函数篇

热门文章

  1. 查找目录下的及子目录下的 所有的给定后缀名的文件并将其路径打印到一个文件中。
  2. 面试必问: Spring IOC
  3. Go bufio.Reader 结构+源码详解
  4. JVM调优思路、订单秒杀jvm调优案例
  5. 未打清分标识处理方式
  6. 今天中午处理的一笔数据真的是好纠结 好心惊胆战
  7. RabbitMQ学习笔记-RabbitMQ的运转流程
  8. 电脑有网络计算机共享怎么用,2台电脑怎么共享文件?没有网络也能共享【详解】...
  9. JUC:ConcurrentSkipListMap/ConcurrentSkipListSet(并发容器)
  10. 关于Zookeeper的几个问题