Java 10 –局部变量类型推断

在本文中,我们将看到作为JEP 286的一部分提出的名为Local Variable Type Inference的Java10功能。 从Java的第一个版本开始,它是一种强类型语言,在这里我们需要提及每种变量数据类型。 我们所有人都感到Java是冗长的语言,并期望精确,紧凑的Java编写方式。 Java 8解决了这个问题。

Java 10在初始化程序中添加了局部变量类型推断 ,以消除冗长的内容。 例如,

jshell> Map<String,String> map = new HashMap<>();
jshell> var map = new HashMap<>(); //This is valid with Java10

这里的LHS变量数据类型将由RHS语句确定。 例如,

jshell> var i = 3;
i ==> 3 //based on RHS, the LHS datatype is int.
jshell>int i=3,j=4; //Valid Declaration
but,
jshell> var j=4,k=5; //Not a Valid Declaration
| Error:
|'var' is not allowed in a compound declaration
| var j=4,k=5;
|^

您可以将此功能用于增强的for循环和for循环。

jshell> List names = Arrays.asList("ABC","123","XYZ");
names ==> [ABC, 123, XYZ]
jshell> for(var name : names){
...> System.out.println("Name = "+ name);
...> }Name = ABC
Name = 123
Name = XYZ

我们也可以在for循环中使用局部变量类型推断。

jshell> int[] arr = {1,2,3,4};
arr ==> int[4] { 1, 2, 3, 4 }jshell> for (var i=0;i<arr.length;i++){...> System.out.println("Value = "+i);...> }
Value = 0
Value = 1
Value = 2
Value = 3

在某些情况下,此功能无效。 例如,

  • 对构造函数变量无效
  • 对实例变量无效
  • 对方法参数无效
  • 无效以分配NULL
  • 无效作为返回类型

让我们看看上述声明的示例。

jshell> public class Sample {...>    private var name = "xyz";...>    public Sample(var name) {...>     this.name=name;...>    }...>    public void printName(var name){...>      System.out.println(name);...>    }...>    public var add(int a, int b) {...>     return a+b;...>    }...> }
|  Error:
|  'var' is not allowed here
|     private var name = "xyz"; //Instance variable
|             ^-^
|  Error:
|  'var' is not allowed here
|     public Sample(var name) { //Constructor variable
|                   ^-^
|  Error:
|  'var' is not allowed here
|     public void printName(var name){ //Method parameter
|                           ^-^
|  Error:
|  'var' is not allowed here
|     public var add(int a, int b) { //Method return type
|            ^-^
jshell> public class Sample {...>    ...>    public static void main(String[] args) {...>     var s = null;...>    }...> }
|  Error:
|  cannot infer type for local variable s
|    (variable initializer is 'null')
|      var s = null;
|      ^-----------^

当我们从较低版本迁移到Java10时,我们不必担心本地变量类型推断,因为它具有向后兼容性。

在接下来的文章中,我们将学习另一个主题。 直到敬请期待!

翻译自: https://www.javacodegeeks.com/2018/06/local-variable-type-inference.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简易计算器微信小程序项目源码

微信公众号&#xff1a;创享日记 发送&#xff1a;计算器 获取完整源码&#xff08;微信开发者工具导入即可用&#xff09; 以下可以忽略不看&#xff01; 微信小程序&#xff0c;小程序的一种&#xff0c;英文名Wechat Mini Program&#xff0c;是一种不需要下载安装即可使用…

MongoDB初学者教程

1. MongoDB简介 在本文中&#xff0c;我们提供了全面的MongoDB教程&#xff0c;该教程与基于Java的应用程序集成。 每当我们读到NoSQL数据库时&#xff0c;我们都需要知道为什么在SQL数据库运行良好时会开发它们。 NoSQL的基础是通过宽松的ACID &#xff08;原子性&#xff0c;…

手势密码解锁微信小程序项目源码

微信公众号&#xff1a;创享日记 发送&#xff1a;手势密码 获取完整源码&#xff08;导入微信开发者工具即可用&#xff09; 以下可以忽略不看&#xff01; 手势密码就是在手机触屏上设置一笔连成的九宫格图案&#xff0c;登录时画一下设定的图形。 运行程序&#xff0c;发…

带你一步一步实战分析缓冲区溢出漏洞攻击

关注公众号有惊喜【部分付费文章免费阅读&#xff0c;持续更新中…】 点击公众号底部【逆向杂记】可见 文件1 (A)描述此二进制文件提供的服务&#xff0c;不需要运行二进制文件来找出这一点。 (B)有可能对此二进制文件进行缓冲区溢出攻击&#xff0c;它在哪里&#xff1f;哪些…

memento模式_Java中的Memento设计模式-示例教程

memento模式记忆模式是行为设计模式之一 。 当我们要保存对象的状态以便以后可以恢复时&#xff0c;可以使用Memento设计模式。 使用Memento模式以这种方式实现该目的&#xff0c;即无法在对象外部访问对象的已保存状态数据&#xff0c;这可以保护已保存状态数据的完整性。 Me…

【JavaSE】Java进阶知识一(泛型详解,包括泛型方法,协变,逆变,擦除机制)

目录 泛型 1. 什么是泛型 2.泛型方法 3.通配符上界&#xff08;泛型的协变&#xff09; 4.通配符下界&#xff08;泛型的逆变&#xff09; 5.泛型的编译&#xff08;擦除机制&#xff09; 泛型 泛型&#xff1a;就是让一个类能适用于多个类型&#xff0c;就是在封装数据结…

Python实验三:Python程序设计之组合数据类型

微信公众号&#xff1a;创享日记 发送&#xff1a;python实验 获取完整清晰报告和源码以及其它资源 前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习…

MATLAB成形滤波、信号过信道

function [y, t] = rcosflt(x, Fd, Fs, type_flag, R, Delay, tol) 根升余弦滤波器 h = rcosdesign(alpha,6,Fs/RB,sqrt); % 根升余弦成形 h1 = rcosine(RB,Fs,fir/sqrt,alpha)

Java 10及更高版本的思考

大家好 Java 10于2018年3月20日发布。我认为许多软件团队将阻止升级。 从Java 8到Java 9的专业人员人数可能还更少。为什么会这样&#xff0c;原因是传统的障碍以及对应用程序服务器&#xff0c;框架甚至是云原生容器的依赖。 例如&#xff0c;如果您正在等待Spring Boot 2.0支…

Python爬虫和数据分析,石油原油加工产品产量数据处理分析

前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;原油分析 获取完整无水印报告P…

基于线性调频(LFM)信号分数阶傅里叶变换的多径时延估计

仿真信号 仿真信号为线性调频信号,信号采样率为2kHz。 线性调频(LFM)信号参数为:初始频率为300Hz,带宽400Hz,脉宽1s,调频斜率为 k ^ = − F s Δ t c o t ( p 0 ⋅ π 2 ) \hat

Python实验二:Python程序设计之结构与复用

微信公众号&#xff1a;创享日记 发送&#xff1a;python实验 获取完整清晰报告和源码以及其它资源 前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习…

基于x86汇编的飞机大战

运行结果 代码 ;宏定义一个显示函数(显示一组字符串) PUTS MACRO STRINGPUSH AXPUSH DXLEA DX, STRING ;LEA将内存地址的

Python实验四:Python程序设计之文件

微信公众号&#xff1a;创享日记 发送&#xff1a;python实验 获取完整清晰报告和源码以及其它资源 前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习…

【OFDM系列1】OFDM调制原理、参数、循环前缀、采样偏差、频偏及估计详解

关注公号【逆向通信猿】回复【OFDM】更精彩!!! OFDM调制解调原理 星座映射==>插入导频==>IFFT调制==>插入CP==>定时==>FFT解调==>导频均衡==>判决恢复 OFDM的正交条件[樊昌信,通信原理]: ①子载波 f k = k 2 T f_k=\frac{k}{2T}

Python统计英文单词出现情况次数实验

前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 一、题目 请统计附件hamlet.txt中出现的英文单词情况&#xff0c;统计并输出出现…

Java EE 8安全性API:概述

新的安全性API 可能&#xff0c;添加到Java EE 8中最重要的一项新功能就是新的安全性API。 此新API的主要动机是简化&#xff0c;标准化和现代化跨容器和实现处理安全性问题的方式。 他们做得很好。 由于三个新的注释使web.xml文件声明变得多余&#xff0c;Web身份验证的配置…

【OFDM系列2】OFDM复信号符号信噪比EsN0、比特信噪比EbN0、SNR的含义及关系详解

更基础的各类信噪比的关系请看博客 【干货2020.12.13更新】实信号、复信号Es、N0、符号信噪比EsN0、带内信噪比、比特信噪比EbN0、SNR的含义及关系详解 本文只讨论OFDM复信号的信噪比关系。 各个参数变量不作赘述,同上一篇博客,直接推 由 E s N 0 = E b ⋅ M N / B n

基于SSH的校园网上购物系统Javaweb、MySQL、JSP

微信公众号&#xff1a;创享日记 发送&#xff1a;校园购物 获取完整论文报告项目Java和SQL源码源文件答辩PPT等 主要内容&#xff1a; 1&#xff0e;对校园网上购物平台的建设需求进行分析&#xff0c;包括产品、服务方式等。 2&#xff0e;按需求对各个功能模块进行设计。 3&…

FSK、PSK基带信号高阶累积量理论值

高阶累积量计算公式 M p q = E { X p − q ( t ) [ X ∗ (