java12关键字var

Java 10使用关键字var引入了局部变量类型推断 。 这意味着无需编写:

Map<Department, List<Employee>> map = new HashMap<>();
// ...
for (Entry<Department, List<Employee>> dept : map.entrySet()) {List<Employee> employees = dept.getValue();// ...
}

您可以使用var减少样板,如下所示:

var map = new HashMap<Department, Employee>();
// ...
for (var dept : map.entrySet()) {var employees = dept.getValue();// ...
}

var消除了在代码中编写显式类型的需要。 这不仅减少了重复,而且还使您的代码更易于维护,因为例如,如果您决定将来更改存储在地图中的对象的类型,则只需要更改一行代码即可。

多态性:

现在让我们看一下var在多态代码中的行为。 例如,如果您有一个Shape类,其中包含两个子类SquareCircle ,则使用var v = new Circle()会推断出什么类型? 让我们在JShell中尝试一下:

jshell> var v = new Circle();
v ==> Circle@4e9ba398jshell> v.getClass();
$13 ==> class Circlejshell> v = new Square();
|  Error:
|  incompatible types: Square cannot be converted to Circle
|  v = new Square();
|      ^----------^

如上所示, v属于Circle类型,如果您尝试将其重新分配给Square ,则编译器将引发错误。

匿名类:

使用var可以做的令人兴奋的事情之一就是创建匿名类并引用其中的字段! 例如:

var person = new Object() {String name = "Joe";int age = 10;
};
System.out.println(person.name + ":" + person.age);

var推断出匿名类的类型,这意味着您可以将匿名类用作中间值的“持有人”,而无需创建和维护新类。 这是另一个示例,显示了如何创建“临时”人对象:

var persons = Stream.of("Alice", "Bob", "Charles").map(s -> new Object() {String name = s;int age = 10;}).collect(toList());
persons.forEach(p -> System.out.println(p.name));

其他注意事项:

如果没有显式初始化(​​分配为null )或在lambda表达式中,则无法使用var

jshell> var v;
|  Error:
|  cannot infer type for local variable v
|    (cannot use 'var' on variable without initializer)
|  var v;
|  ^----^jshell> var v = null;
|  Error:
|  cannot infer type for local variable v
|    (variable initializer is 'null')
|  var v = null;
|  ^-----------^jshell> var v = () -> {}
|  Error:
|  cannot infer type for local variable v
|    (lambda expression needs an explicit target-type)
|  var v = () -> {};
|  ^---------------^

翻译自: https://www.javacodegeeks.com/2018/05/java-10-the-var-keyword.html

java12关键字var

java12关键字var_Java 10:“ var”关键字相关推荐

  1. Java 10 var关键字详解和示例教程

    \ 关键要点 \\ Java 10引入了一个闪亮的新功能:局部变量类型推断.对于局部变量,现在可以使用特殊的保留类型名称"var"代替实际类型.\\t 提供这个特性是为了增强Jav ...

  2. 使用 var 关键字在 Java 中使用动态类型

    在本文中,我们将讨论 Java 10 的一项很酷的特性--在 Java 中引入 var 关键字 . 扫码关注<Java学研大本营>,加入读者群,分享更多精彩 Java 获得了 var 关键 ...

  3. Java 10:“ var”关键字

    Java 10使用关键字var引入了局部变量类型推断 . 这意味着无需编写: Map<Department, List<Employee>> map = new HashMap ...

  4. C# 中的var关键字

    C# 中的var关键字 var 是3.5新出的一个定义变量的类型 其实也就是弱化类型的定义 VAR可代替任何类型 编译器会根据上下文来判断你到底是想用什么类型的 至于什么情况下用到VAR 我想就是你无 ...

  5. var是java关键字,Java 中的 var 关键字及代码示例

    本文将介绍是 Java 中的 var 关键字以及如何使用它. 从 Java 10(JDK 10)开始,var 关键字已添加到 Java 语言中,支持局部变量类型推断,在该功能中,Java 编译器可根据 ...

  6. java10 var关键字浅析

    2018年3月20日,Oracle发布java10.java10为java带来了很多新特性,其中让人眼前一亮的便是var关键字的引入. 从今以后我们可以这样写java代码了. public class ...

  7. 什么时候用var关键字

    C#关键字是伴随这.NET 3.5以后,伴随着匿名函数.LINQ而来, 由编译器帮我们推断具体的类型.总体来说,当一个变量是局部变量(不包括类级别的变量),并且在声明的时候初始化,是使用var关键字的 ...

  8. JavaScript中var关键字的使用详解

    作用声明作用:如声明个变量. 语法 ? 1 var c = 1; 省略var在javascript中,若省略var关键字而直接赋值,那么这个变量为全局变量,哪怕是在function里定义的. ? 1 ...

  9. 深入理解C#中var关键字的用法

    文章目录 一.C# 中的var关键字 二.使用var定义变量的特点 三.示例讲解 一.C# 中的var关键字 var是3.5新出的一个定义变量的类型,其实也就是弱化类型的定义,var可代替任何类型,编 ...

最新文章

  1. 改变Eclipse主题颜色
  2. Java中switch语句支持的类型
  3. 中国生物燃料市场产能预测与十四五战略前景展望报告2022年
  4. 无外网环境下CentOS 7安装MySQL 5.7.18
  5. wxPython控件学习之TextCtrl(二)多行及样式文本框
  6. 基于IC设计的实用ISP介绍
  7. 校园网 显示ldap服务器连接不上,客户端无法连接到LDAP服务器
  8. Android Timer和TimerTask解决IllegalStateException:Task already scheduled or cancelled
  9. SPRING IN ACTION 第4版笔记-第八章Advanced Spring MVC-003-Pizza例子的基本流程
  10. 抖音壁纸小程序源码最新版,支持达人入驻和多端发布
  11. 如何立即尝试macOS High Sierra Beta
  12. 如何包装你的实验结果
  13. useReducer
  14. logrotate - rotates, compresses, and mails system logs
  15. java连接打印机打印PDF
  16. 5分钟通俗易懂了解什么是云存储
  17. 基于python的验证码自动识别系统设计与实现
  18. 中国数据科学家年薪有多少?
  19. lvds传输距离标准_信号链基础知识(第 37 部分):LVDS——低压差分信号传输
  20. 全国计算机考试cad,国家CAD考试CAD试题库.pdf

热门文章

  1. 新汉诺塔(洛谷P1242)含第11个数据的解决办法
  2. CF932G-Palindrome Partition【PAM】
  3. ssl2348-连接格点【图论,最小生成树,并查集】
  4. 字符串(AC自动机(fail tree))
  5. CF449B Jzzhu and Cities(Dijkstra)
  6. P2468 [SDOI2010]粟粟的书架 动态规划,主席树,二分答案
  7. Div1 小A抓小B tarjan双连通分量缩点+dfs
  8. 汇编语言(七)之字符串转大写
  9. 两年摸爬滚打 Spring Boot,总结了这 16 条最佳实践
  10. CGLIB 实现代理对象API