lambda表达式与方法重载问题
笔者之前在学习Java8新特性的时候,最吸引我的就是lambda表达式,它无疑为Java函数编程提供了强有力的支持。lambda表达式的使用方法很简单,下面给出最简单的用法。
// InterfaceA.java
// 在这里声明了一个函数式接口
@FunctionalInterface
public interface InterfaceA {
void function(String a);
}
// LambdaDemo.java
public class LambdaDemo {
public static void main(String[] args) {
// 使用lambda表达式创建一个匿名对象,打印参数
func(param->System.out.println(param));
}
public static void func(InterfaceB interfaceB) {
interface2.function("Hello, world!");
}
}
lambda表达式的相关知识不再赘述,函数式接口在使用的时候无需指定参数类型,后面直接跟->和Java代码即可。因为编译器会根据函数式接口InterfaceA的方法function(Integer a)自动确定参数类型。那么这样就会导致一个问题(脑洞大开的我自然想到这个问题),万一参数确定不了怎么办。那么在什么情况下确定不了呢?对,方法重载!
// InterfaceA.java
// 在这里声明了一个函数式接口
@FunctionalInterface
public interface InterfaceA {
void function(String a);
}
// InterfaceA.java
// 在这里声明了一个函数式接口
@FunctionalInterface
public interface InterfaceA {
void function(String a);
}
// LambdaDemo.java
public class LambdaDemo {
public static void main(String[] args) {
func(param->System.out.println(param));
}
public static void func(InterfaceB interfaceB) {
interfaceA.function(0);
}
public static void func(InterfaceA interfaceA) {
interfaceB.function("Hello, world!");
}
}
也就是在参数param前面加上String以告诉编译器它是字符串类型,这样编译器就会确定调用的实际方法是public static void func(InterfaceA interfaceA);这下问题便迎刃而解。
这个疑问是去年在学习Java8中产生的,今天无聊用IDE试了一下确实是这样的,就将该疑问以及解决办法记录下来。
lambda表达式与方法重载问题的更多相关文章
- C#10新特性-lambda 表达式和方法组的改进
C# 10 中对Lambda的语法和类型进行了多项改进: 1. Lambda自然类型 Lambda 表达式现在有时具有"自然"类型. 这意味着编译器通常可以推断出 lambda 表 ...
- JAVA8之Lambda表达式与方法引用表达式
一.Lambda表达式 基本语法: lambdaParameters->lambdaBody lambdaParameters传递参数,lambdaBody用于编写逻辑,lambda表达式会生成 ...
- 编写高质量代码改善C#程序的157个建议——建议150:使用匿名方法、Lambda表达式代替方法
建议150:使用匿名方法.Lambda表达式代替方法 方法体如果过小(如小于3行),专门为此定义一个方法就会显得过于繁琐.比如: static void SampeMethod() { List< ...
- 编写高质量代码改善C#程序的157个建议——建议37:使用Lambda表达式代替方法和匿名方法
建议37:使用Lambda表达式代替方法和匿名方法 在建议36中,我们创建了这样一个实例程序: static void Main(string[] args) { Func<int, int, ...
- C# Lambda表达式Contains方法 like
原文:Lambda表达式Contains方法 like 1.使用Contains方法的必备条件: Contains等价于SQL中的like语句.不过Contains只针对于字符串(string)类型的 ...
- java8 探讨与分析匿名内部类、lambda表达式、方法引用的底层实现
问题解决思路:查看编译生成的字节码文件 目录 测试匿名内部类的实现 小结 测试lambda表达式 小结 测试方法引用 小结 三种实现方式的总结 对于lambda表达式,为什么java8要这样做? 理论 ...
- java8的新特性之lambda表达式和方法引用
1.1. Lambda表达式 通过具体的实例去体会lambda表达式对于我们代码的简化,其实我们不去深究他的底层原理和背景,仅仅从用法上去理解,关注两方面: lambda表达式是Java8的一个语法糖 ...
- Java函数式编程:一、函数式接口,lambda表达式和方法引用
Java函数式编程 什么是函数式编程 通过整合现有代码来产生新的功能,而不是从零开始编写所有内容,由此我们会得到更加可靠的代码,并获得更高的效率 我们可以这样理解:面向对象编程抽象数据,函数式编程抽象 ...
- 十二、C# 委托与Lambda表达式(匿名方法的另一种写法)
委托与Lambda表达式 1.委托概述 2.匿名方法 3.语句Lambda 4.表达式Lambda 5.表达式树 一.委托概述 相当于C++当中的方法指针,在C#中使用delegate 委托来 ...
随机推荐
- 汇编语言教材assembly language
https://en.wikipedia.org/wiki/Assembly_language https://baike.baidu.com/item/%E6%B1%87%E7%BC%96%E8%A ...
- RSD 直观介绍
RSD TOR RSD SLED Blade MEMORY REDFISH REDFISH with Storage IPMI https://yyscamper.gitbooks.io/the-wa ...
- UI自动化(一)html基础
前端的三把利器 HTML:赤裸的一个人 CSS:华丽的衣服 JS/JavaScript:赋予这个人的行为,也就是动起来 DOM 就是将页面变成可操 HTML(超文本标记语言) html代码实际上就是一 ...
- socket之 select模型
前段时间一直想学习网络编程的select模型,看了<windows网络编程>的介绍,参考了别人的博客. 这里的资料主要来自http://www.cnblogs.com/RascallySn ...
- thinkphp5 中使用 七牛云 上传图片和文件
原文链接:http://www.thinkphp.cn/code/3279.html 参考:https://blog.csdn.net/rain_web/article/details/7910542 ...
- Building a Keras + deep learning REST API(三部曲之一)
一.基本环境 ) image = imagenet_utils.preprocess_input(image) , )) ]: ...
- 关于python hashlib模块的使用
hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法 #!/usr/bin/ ...
- 从客户端(XXX)中检测到有潜在危险的Request.Form 值
aspx 页面出现 [HttpRequestValidationException (0x80004005):从客户端(TextBox1="<?xml version="1. ...
- Docker 入门指南——资源工具篇
好工具 dive wagoodman/dive A tool for exploring each layer in a docker image 参考 用 Dive 看 Docker Image 裡 ...
- Vim 学习
主要分为三种模式: 一般模式 编辑模式 命令行模式 光标的移动 单词级 比单纯的逐个字符的移动,效率要高 w or W 向移动到下一单词开头 ★★ b or B 向左移动到单词开头 ★★ 块级 gg文 ...