Var和语言设计

Java中的var是什么

Java 10中引入的var预定义类型使您可以在为变量分配值时声明局部变量,而无需指定变量的类型。 当您为变量分配值时,表达式的类型已经定义了变量的类型,因此没有理由在行的左侧再次键入类型。 例如,当您有一些带有许多泛型的复杂长类型时,这特别好

 HashMap<String,TreeMap<Integer,String> myMap = mapGenerator(); 

您可以在先前的Java版本中继承的泛型类型,但是现在您只需键入

 var myMap = mapGenerator(); 

这比以前的版本更简单,并且大多数时候可读性更高。 var的目的主要是可读性。 重要的是要了解,以这种方式声明的变量将具有类型,并且此新的预定义类型(不是关键字)的引入不会使Java成为动态语言。 您可以通过某些方式做到这一点,这是您以前无法做到的,或者只能以更冗长的方式做到。 例如,当您将匿名类的实例分配给变量时,可以通过var声明的变量调用该类中的声明方法。 例如:

 var m = new Object{ void z(){} }  mz(); 

您可以调用方法z()但代码

 Object m = new Object{ void z(){} }  mz(); 

无法编译。 您可以这样做,因为匿名类实际上在其诞生时就有一个名称,因此当实例分配给声明为Object类型的变量时,它们只会丢失名称。

var关键字有一些阴暗的部分。 这样,我们违反了实例化具体类的一般规则,但是将变量声明为接口。 这是一个通常在Java中通常遵循的通用抽象规则。 创建返回HashMap的方法时,通常将返回值声明为Map 。 这是因为HashMap是返回值的实现,因此与调用者无关。 我在返回类型中声明的是我返回实现Map接口的东西。 我的工作方式是我自己的责任。 同样,如果可能的话,我们通常将类中的字段声明为某种接口类型。 局部变量也应遵循相同的规则。 几次,当我声明要Set的局部变量但对实际值是TreeSet然后键入代码时,对我很有帮助。 然后我意识到我使用的不是Set而是SortedSet某些功能。 它帮助我意识到sorting-ness在特殊情况下很重要,并且对于调用者也很重要,因此我不得不将方法的返回类型也更改为SortedSet 。 请注意,此示例中的SortedSet仍然是接口,而不是实现类。

通过使用var我们将失去它,并且获得了稍微简单一些的源代码。 一如既往,这是一个折衷。 在使用局部变量的情况下,就源代码而言,该变量的使用与声明很接近,因此开发人员可以一目了然地看到什么是正在发生的事情,因此这种折衷的“坏”方面是可以接受的。 在方法返回值或字段的情况下,无法进行相同的折衷。 这些类成员的使用可以在不同的类,不同的模块中。 看到这些值的所有用法不仅很困难,而且也可能是不可能的,因此,这里我们仍然沿用旧的方式:声明类型。

var的未来(只是想法)

在某些情况下,甚至不能将var用于局部变量。 很多时候,我们有以下编码模式:

 final var variable; // this does not work in Java 11  if ( some condition ) { variable = expression_1 // do something here  } else { variable = expression_2 // do something here  } 

在这里我们不能使用var因为在声明本身上没有分配变量的表达式。 但是,编译器可以扩展。 从现在开始,我所谈论的不是Java,而是现在。 这就是我想象的将来的版本。

如果结构简单并且“在这里做某事”为空,则可以将结构转换为三元运算符:

 final var variable = some condition ? ( expression_1 ) : (expression_2) var variable = some condition ? ( expression_1 ) : (expression_2) 

在这种情况下,即使我们使用Java的旧版本,例如Java 11,也可以使用var声明。但是,请小心!

 var h = true ? 1L : ? 1L : 3.3 ; 

在此示例中,变量h的实际类型是什么? Number ? 三元运算符具有复杂且特殊的类型强制规则,由于两个表达式彼此靠近,通常不会引起任何问题。 如果我们让上述结构使用类似的类型强制,则表达式彼此之间的距离并不那么紧密。 到目前为止,Java的距离足够远,不允许使用var类型定义。 我个人的观点是,应在将来的某个时候扩展var声明,以允许使用上述结构,但仅当两个(或两个或更复杂的结构)表达式具有完全相同的类型时才可以。 否则,我们可能最终得到一个表达式,该表达式导致一个int ,另一个表达式导致一个String ,那么变量的类型将是什么? 回答前请勿偷看图片!

(这个很好的例子是Nicolai Parlog给出的。)

我还可以想象,将来我们将拥有类似于Scala val东西,它是Java 11中的final var 。我不喜欢var vs. val命名。 这是极度性感和怪异的,但很容易将一个人误认为另一个人。 但是,如果我们有一个以final关键字开头的局部变量声明,那么为什么之后需要var关键字呢?

最后,我确实相信var是Java 11中的一个很棒的工具,但是我也希望它的作用将来会得到扩展。

翻译自: https://www.javacodegeeks.com/2019/03/var-language-design.html

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

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

相关文章

[渝粤教育] 广东-国家-开放大学 21秋期末考试财务管理10164k2 (3)

1、主要依靠股利维持生活的股东和养老基金管理人最不赞成的股利政策是&#xff08; &#xff09; &#xff08;2 分&#xff09; A&#xff0e;定率股利政策 B&#xff0e;剩余股利政策 C&#xff0e;低定额加额外股利政策 D&#xff0e;定数额股利政策 2、下列&#xff08;&am…

什么是透明传输 点对多传输? 它们有哪些经典应用和优势特点

目录 是什么 01 透明传输 02 点对多 应用方案 01 在蔬菜大棚的应用 前言 特点 应用方案 02 在水产养殖中的应用 前言 特点 应用方案 优势 优点 是什么 01 透明传输 模块对使用者是开放的&#xff0c;透明的&#xff0c;不管传的是什么&#xff0c;所采用的设备只是…

工业以太网交换机在工厂环境中使用需要注意哪些问题?

工业交换机也称作工业以太网交换机&#xff0c;即应用于工业控制领域的以太网交换机设备&#xff0c;由于采用的网络标准&#xff0c;其开放性好、应用广泛以及价格低廉、使用的是透明而统一的TCP/IP协议&#xff0c;以太网已经成为工业控制领域的主要通信标准。因为工厂的环境…

【渝粤教育】 广东开放大学 21秋期末考试婚姻家庭法10218k2

1、养子女年满10周岁以上的&#xff0c;应当征得本人同意。&#xff08; &#xff09;&#xff08;2 分&#xff09; 正确 错误 2、伯、叔、姑与侄、侄女&#xff0c;舅、姨与甥、甥女属于三代以内的旁系血亲&#xff08; &#xff09;&#xff08;2 分&#xff09; 正确 错误 …

【无线电波】蓝牙Bluetooth来源 原理?有无辐射影响健康 是否安全!?

今天我们主要学习无线电波蓝牙Bluetooth诞生来源&#xff1f;蓝牙Bluetooth是怎么运行的&#xff1f;是否安全&#xff0c;有无辐射&#xff0c;会不会影响健康&#xff1f;蓝牙名字的诞生及来源&#xff0c;与“烂”牙有什么关系 我们称为“蓝牙”的想法最早是在1989年提出的&…

【渝粤教育】 广东开放大学21秋期末考试管理学基础10241k2

、涉及计划工作的基本特征的下列各种说法中&#xff0c;错误的是&#xff08; &#xff09;。A&#xff0e;计划工作的普遍存在B&#xff0e;计划工作居首要地位C&#xff0e;计划是一种无意识形态D&#xff0e;计划工作要讲究效率&#xff08;2 分&#xff09; A&#xff0e;A…

【无线串口模块快速选型指南】通信频点、芯片、通信距离、功率灵敏度、电流 空中速率

目录 简介 串口模块的选型要点 01 通信频点 02 芯片方案 03 通信距离 04 发射功率、接收灵敏度 发射功率 接收灵敏度 05 发射电流、接收电流、休眠电流 06 空中速率 07 天线接口形式 08 封装形式及尺寸 举例说明选型要点 总结 简介 无线模块&#xff1a;通过无线…

【渝粤教育】国家开放大学2018年春季 0093-21T刑法 参考试题

科目编号&#xff1a;[XXXX] 座位号 2017-2018学年度第二学期期末考试 刑法学 试题 2018年 5 月 一、不定项选择题&#xff08;本大题共6小题&#xff0c;每小题5分&#xff0c;共计30分&#xff09; &#xff08;★请考生务必将答案填入到下面对应序号的答题框中★&#xff0…

善用工具_善用封盖

善用工具不久前&#xff0c;在博客中 &#xff0c;我解释了Groovy中Closure的含义。 这篇博客文章将解释一个使用它们的好例子。 最近&#xff0c;我发现自己不得不为服务AJAX请求的大量后端Controller API编写相同的异常处理逻辑。 就像这样&#xff1a; class ApiRugbyPlaye…

华三交换机怎么样?H3C交换机产品系列介绍!

H3C能够提供业界覆盖最全面的交换机产品。从园区到数据中心、盒式到箱式、从FE、GE到10G和100G&#xff0c;从L2到L4/7&#xff0c;从IPv4到IPv6&#xff0c;从接入到核心&#xff0c;用户都有最丰富的选择和灵活的组合。接下来我们一起来了解下华三交换机以及H3C交换机产品系列…

【渝粤教育】国家开放大学2018年春季 0300-21T图形创意 参考试题

编号&#xff1a;0300 座位号 2017&#xff5e;2018学年度第二学期期末考试 图形创意试题 2018年7月 一、设计制作题&#xff08;100分&#xff09; 以“君子兰”为造型元素进行视觉联想。根据自己的创意写出完整的图形创意方案。 内容要求及得分&#xff1a; 1.富有新意和趣味…

【指南】远程抄表系统(AMR/AMI)中无线模块选型

概述 远程抄表系统是为提高水表、电表等能耗参数的综合计费管理水平而设计的新兴技术。它以全自动的抄表方式取代了传统的人工抄表方式&#xff0c;和同类抄表系统相比&#xff0c;具有网络结构自适应、免调试、免维护、运行稳定、方便扩展的特点。该系统采用先进的无线网络数…

【渝粤教育】国家开放大学2018年春季 0632-21T老年保健按摩 参考试题

科目编号&#xff1a;0632 座位号 2017-2018学年度第二学期期末考试 老年保健按摩试题 2018年7月 一、名词解释&#xff08;本大题共5小题&#xff0c;每小题4分&#xff0c;共计20分&#xff09; 1.骨度分寸法&#xff1a; 2.三叉神经痛&#xff1a; 3.间接标志法&#xff…

ZigBee网络角色 拓扑结构 无线模块组网典型应用

01 简介 ZigBee 是一种短距离&#xff0c;低功耗&#xff0c;低速率&#xff0c;低成本的一种无线自组网通信技术。 02 网络特点 ZigBee 网络有如下特点&#xff1a;低功耗&#xff0c;自组网&#xff0c;多跳路由&#xff0c;高安全&#xff0c;抗干扰能力强 03 ZigBee 网络…

Java中的WeakHashMap

Java中的WeakHashMap是中高级Java开发人员中非常流行的数据结构。 WeakHashMap类位于java.util包中。 这是一个Map实现&#xff0c;其中存储了对其键的弱引用。 当关联密钥丢失其所有活动的强引用和软引用时&#xff0c; WeakHashMap中的条目将自动删除。 在本文中&#xff0…

关于交换机的VLAN技术你了解多少?

VLAN&#xff08;虚拟局域网&#xff09;是对连接到的第二层交换机端口的网络用户的逻辑分段&#xff0c;不受网络用户的物理位置限制而根据用户需求进行网络分段。一个VLAN可以在一个交换机或者跨交换机实现。VLAN可以根据网络用户的位置、作用、部门或者根据网络用户所使用的…

【渝粤教育】国家开放大学2018年春季 3781-22T燃气燃烧技术与设备 参考试题

科目编号&#xff1a;3781 座位号 2017-2018学年度第二学期期末考试 燃气燃烧技术与设备 试题 2018年 7 月 一、填空题&#xff08;本大题共6空&#xff0c;每空5分&#xff0c;共计30分&#xff09; 1&#xff0e;完全预混燃烧条件&#xff1a;一是 &#xff1b;二是 。 2&a…

什么是电源正激和反激? 正激和反激有什么区别特点?如何快速区分

正激和反激是两种不同的开关电源技术 正激式开关电源 01 简介 正激式开关电源是指使用正激高频变压器隔离耦合能量的开关电源&#xff0c;正激式开关电源中结构比较复杂&#xff0c;输出功率高&#xff0c;适用于低压&#xff0c;大电流&#xff08;100W&#xff0d;300W&…

Time-of-Flight技术在距离测量和定位上的应用

LoRa技术是Semtech公司采用并且推广的的一种基于扩频技术的超远距离无线传输方案&#xff0c;属于低功耗广域网&#xff08;Low Power Wide Area Network&#xff0c;LPWAN&#xff09;通信技术中的一种。LoRa技术不再受限于传输距离和功耗的折衷考虑&#xff0c;为用户们提供了…

【渝粤教育】国家开放大学2018年春季 7397-21T家庭教育咨询与辅导 参考试题

编号&#xff1a;7397 座位号 2017-2018学年度第二学期期末考试 家庭教育咨询与辅导 试题&#xff08;开卷&#xff09; 2018年7月 一、填空题&#xff08;每空1分&#xff0c;共16分。错别字不给分。&#xff09; 传统的家庭模式分为三类&#xff0c;分别是&#xff1a;核心…