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
在下拉列表中选择 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"
,推断局部变量str
为String
类型。
代码清单 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>
,推断局部变量list
为ArrayList
类型。
为了说明以下她的优点我们看看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 局部类型推断相关推荐
- java中无法推断类型参数_Java 10中的本地类型推断,或者如果它像鸭子一样嘎嘎叫...
java中无法推断类型参数 最近,Oracle采用了一种新策略,即每六个月发布一次新的语言版本. 该策略假定只有每个第3版都将提供长期支持或LTS. 快速说明: 具有LTS的当前版本是Java 8: ...
- Java 10中的本地类型推断,或者如果它像鸭子一样嘎嘎叫
最近,Oracle采用了一种新策略,即每六个月发布一次新的语言版本. 该策略假定只有每个第3版都将提供长期支持或LTS. 快速说明: 具有LTS的当前版本是Java 8: Java 9仅应在2018年 ...
- Java类型推断将不再支持可变性规范
Java类型推断是一项推荐的Java特性,允许开发人员使用var关键字代替显式的变量类型声明.最近的报道显示,由于社区内无法就区分可变和不可变变量的实现方式达成一致意见,Java类型推断将不再支持使用 ...
- Java 编程问题:四、类型推断
原文:Java Coding Problems 协议:CC BY-NC-SA 4.0 贡献者:飞龙 本文来自[ApacheCN Java 译文集],自豪地采用谷歌翻译. 本章包括 21 个涉及 JEP ...
- Java中的类型推断和lambda表达式
文章目录 简介 类型的显示使用 Stream中的类型推断 类型推断中变量名字的重要性 类型推断对性能的影响 类型推断的限制 总结 简介 java是强类型的编程语言,每个java中使用到的变量都需要定义 ...
- 根据变量推断变量类型_Java A的新本地变量类型推断
根据变量推断变量类型 对于编程语言迷来说,新闻几乎比这更令人兴奋! 现在,存在状态为"候选"的JEP 286用于本地变量类型推断 . 以及Brian Goetz的反馈请求,我很想邀 ...
- Java A的新本地变量类型推断
对于编程语言迷来说,新闻几乎比这更令人兴奋! 现在有一个状态为"候选"的本地变量类型推断的JEP 286 . 以及Brian Goetz的反馈请求,我很想邀请您参加: http : ...
- Effective Modern C++ 第一章 C++11/14/17中的类型推断
Chapter 1, Deducing Type Item 1: Template type deduction 一些基础知识: 关于左值和右值的一些解释:https://book.2cto.com/ ...
- java全局变量和局部变量_Java 10:局部变量类型推断
java全局变量和局部变量 In this article, we would take a deep dive at the new feature of Local-Variable Type I ...
最新文章
- oracle sqlserver 查看指定用户下面的表
- 全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<流程挂起与激活篇>
- 软件开发python方向_2020年软件开发7大学习方向!
- Java之多线程断点下载的实现
- effective java读书笔记12:考虑实现Comparable接口
- 服务器wifi无线放大器,无线wifi中继放大器的使用方法
- 数据结构(C#)_排序算法(冒泡排序)
- vue 兼容IE解决方案, Babel .babelrc
- hive执行出现问题:Ended Job = job_1667594872527_3123 with errors Error during job, obtaining debugging info
- 大量的数据mysql查询最新的记录慢问题
- 【实时渲染】屏幕空间特效和多边形技术
- 解决 chrome 启动时强制打开2345导航(或其他网址)的方法
- 计算机切换输入法Word关闭,win7旗舰版64位系统下word程序无法切换输入法的解决方法...
- 通过docker部署一个简单的web服务
- 新版曝光骗子公示PHP系统源码+云黑系统
- 会声会影2022最新版安装包下载
- XigmaNas系统(二):蜗牛星际安装Xigmanas(Nas4Free)
- 假如当初知道skycc营销软件是不是比现在好
- 全国一级计算机考证报名网站
- Python基础知识之函数篇
热门文章
- 查找目录下的及子目录下的 所有的给定后缀名的文件并将其路径打印到一个文件中。
- 面试必问: Spring IOC
- Go bufio.Reader 结构+源码详解
- JVM调优思路、订单秒杀jvm调优案例
- 未打清分标识处理方式
- 今天中午处理的一笔数据真的是好纠结 好心惊胆战
- RabbitMQ学习笔记-RabbitMQ的运转流程
- 电脑有网络计算机共享怎么用,2台电脑怎么共享文件?没有网络也能共享【详解】...
- JUC:ConcurrentSkipListMap/ConcurrentSkipListSet(并发容器)
- 关于Zookeeper的几个问题