类型检查

Lambda 的类型是从 Lambda 的上下文推断出来的。

上下文中 Lambda 表达式需要的类型称为 目标类型

图示如下

同样的 lambda,不同的函数接口

/*** 相同的 lambda 表达式,但是不同的函数接口* 只要他们的抽象方法签名可以兼容。*/
@Test
public void sameLambdaDiffFunctional() {Comparator<Apple> c1 = (Apple one, Apple two)->one.getWeight().compareTo(two.getWeight());ToIntBiFunction<Apple, Apple> c2 = (Apple one, Apple two)->one.getWeight().compareTo(two.getWeight());
}

类型推断

/*** 如果 lambda 表达式是一个语法表达式* 他就和一个返回 void 的函数描述符兼容(参数列表也要建荣)*/
@Test
public void voidTest() {List<String> stringList = Arrays.asList("1");Predicate<String> predicate = s->stringList.add(s);Consumer<String> consumer = s->stringList.add(s);
}

限制

/*** 类型推断* 作用:可以进一步简化你的代码*/
@Test
public void typeInferenceTest() {Comparator<Apple> c1 = (Apple one, Apple two)->one.getWeight().compareTo(two.getWeight());Comparator<Apple> c2 = (one, two)->one.getWeight().compareTo(two.getWeight());}

目录导航

目录导航

Java8 实战系列-05-lambda 类型推断相关推荐

  1. java8类型推导,鲜为人知的Java8特性:泛化目标类型推断,java8泛化

    鲜为人知的Java8特性:泛化目标类型推断,java8泛化 在浏览Java8的特性列表的时候,目标类型推断这个特别有趣的.鲜为人知的特性一下子吸引了我.Java语言的设计者通过它让我们减轻了一些使用泛 ...

  2. lambda 两个list获取交集_《Java8 实战》笔记 - Lambda 表达式

    Lambda 表达式介绍 ​ 可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它 有参数列表.函数主体.返回类型,可能还有一个可以抛出的异常列表.这个定义够大的,让我 ...

  3. java8类型推导,鲜为人知的Java8特性:泛化目标类型推断

    本文由 ImportNew - 彭秦进 翻译自 javacodegeeks.如需转载本文,请先参见文章末尾处的转载要求. ImportNew注:如果你也对Java技术翻译分享感兴趣,欢迎加入我们的 J ...

  4. Java 8新特性探究(6):泛型的目标类型推断

    简单理解泛型 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.通俗点将就是"类型的变量".这种类型变量可以用在类.接口和方法 ...

  5. 《Java8实战》笔记(03):Lambda表达式

    本文源码 Lambda 管中窥豹 可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表.函数主体.返回类型,可能还有一个可以抛出的异常列表. Lambda表达 ...

  6. Java8新特性系列(Lambda)

    上期我们分析了Java8中Interface的相关新特性,其中包括函数式接口,可以在调用时,使用一个Lambda表达式作为参数,那么我们就来谈谈Java8中的Lambda表达式吧. 定义 Lambda ...

  7. Java 10 实战第 1 篇:局部变量类型推断

    现在 Java 9 被遗弃了直接升级到了 Java 10,之前也发过 Java 10 新特性的文章,现在是开始实战 Java 10 的时候了. 今天要实战的是 Java 10 中最重要的特性:局部变量 ...

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

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

  9. java 复合方法_《Java 8 实战》Ch3: Lambda表达式(下):类型与限制、方法引用、复合...

    李文轩 2019-04-23 3.5 类型的检查和判断:变量捕获限制 类型检查 Lambda的类型是从使用Lambda的上下文推断出来的. Lambda表达式需要的类型称为目标类型 . Lambda表 ...

  10. Kotlin系列之Lambda表达式(1)

    今天开始后续的几篇Kotlin的文章会介绍Kotlin中Lambda表达式相关的内容. 什么是Lambda表达式 在Java8中引入了Lambda表达式,这是最令Java开发者激动和期待的一个功能.那 ...

最新文章

  1. AJAX:Getting Started
  2. [TPYBoard - Micropython] 五分种学会用TPYBoard - GPS 制作短信群发机
  3. crash recovery mysql_InnoDB crash recovery 完整过程
  4. 利用wxpython编写GUI
  5. 5G计费方式将迎来彻底变化 运营商向2B服务出手?
  6. Linux_c++线程函数的使用
  7. Tomcat 指定jdk
  8. mysql 进阶到高级_MySQL 高级(进阶) SQL 语句精讲(一)
  9. c# richtextbox转html,C# RichTextBox 输入内容转自定义样式图像
  10. 基于Android系统的IPv6网络接入分析
  11. 当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。
  12. 第二百一十六节,jQuery EasyUI,Spinner(微调)组件
  13. 【路径规划】基于matlab模拟退火算法求解火灾巡逻最短路径问题【含Matlab源码 252期】
  14. 电力系统同步发电机励磁系统的建模与仿真
  15. 飞机大战php 源码,飞机大战资源素材及完整代码
  16. 【转】鼠标右键菜单设置大全
  17. 不可逆加密算法-MD5
  18. mysql 身份证 年龄_mysql 中通过身份证号码计算年龄
  19. JavaScript打开APP
  20. php公众号开发配置网页域名,微信公众号网页开发授权配置流程

热门文章

  1. Android开发者必备工具-常见Android模拟器(MuMu、夜神、蓝叠、逍遥、雷电、Genymotion...)
  2. 西门子S7-200 SMART编程软件下载
  3. H.266代码学习:xCheckRDCostMerge2Nx2N函数
  4. 华为手机屏幕锁屏时间设置_华为手机自动锁屏时间设置
  5. epson r1900 清零软件_Epson爱普生me1100清零软件 me1100打印机废墨清零软件
  6. Redhat 安装Informix 12.10
  7. Python-密码字典生成
  8. 按网络管理模式 计算机网络可分为,计算机网络应用 按网络管理模式分类
  9. 中国汉字大全 免费下载
  10. maya_Arnold_Aov分层渲染插件 v1.1.0 更新下载及视频教程