笔者之前在学习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表达式与方法重载问题的更多相关文章

  1. C#10新特性-lambda 表达式和方法组的改进

    C# 10 中对Lambda的语法和类型进行了多项改进: 1. Lambda自然类型 Lambda 表达式现在有时具有"自然"类型. 这意味着编译器通常可以推断出 lambda 表 ...

  2. JAVA8之Lambda表达式与方法引用表达式

    一.Lambda表达式 基本语法: lambdaParameters->lambdaBody lambdaParameters传递参数,lambdaBody用于编写逻辑,lambda表达式会生成 ...

  3. 编写高质量代码改善C#程序的157个建议——建议150:使用匿名方法、Lambda表达式代替方法

    建议150:使用匿名方法.Lambda表达式代替方法 方法体如果过小(如小于3行),专门为此定义一个方法就会显得过于繁琐.比如: static void SampeMethod() { List< ...

  4. 编写高质量代码改善C#程序的157个建议——建议37:使用Lambda表达式代替方法和匿名方法

    建议37:使用Lambda表达式代替方法和匿名方法 在建议36中,我们创建了这样一个实例程序: static void Main(string[] args) { Func<int, int, ...

  5. C# Lambda表达式Contains方法 like

    原文:Lambda表达式Contains方法 like 1.使用Contains方法的必备条件: Contains等价于SQL中的like语句.不过Contains只针对于字符串(string)类型的 ...

  6. java8 探讨与分析匿名内部类、lambda表达式、方法引用的底层实现

    问题解决思路:查看编译生成的字节码文件 目录 测试匿名内部类的实现 小结 测试lambda表达式 小结 测试方法引用 小结 三种实现方式的总结 对于lambda表达式,为什么java8要这样做? 理论 ...

  7. java8的新特性之lambda表达式和方法引用

    1.1. Lambda表达式 通过具体的实例去体会lambda表达式对于我们代码的简化,其实我们不去深究他的底层原理和背景,仅仅从用法上去理解,关注两方面: lambda表达式是Java8的一个语法糖 ...

  8. Java函数式编程:一、函数式接口,lambda表达式和方法引用

    Java函数式编程 什么是函数式编程 通过整合现有代码来产生新的功能,而不是从零开始编写所有内容,由此我们会得到更加可靠的代码,并获得更高的效率 我们可以这样理解:面向对象编程抽象数据,函数式编程抽象 ...

  9. 十二、C# 委托与Lambda表达式(匿名方法的另一种写法)

    委托与Lambda表达式   1.委托概述 2.匿名方法 3.语句Lambda 4.表达式Lambda 5.表达式树   一.委托概述 相当于C++当中的方法指针,在C#中使用delegate 委托来 ...

随机推荐

  1. Docker学习笔记之Docker 的简历

    0x00 概述 在了解虚拟化和容器技术后,我们就更容易理解 Docker 的相关知识了.在这一小节中,我将介绍关于 Docker 的出现和发展,Docker 背后的技术.同时,我们将阐述 Docker ...

  2. An Example of How Oracle Works

    Oracle是怎么工作的,摘自Oracle 9i的官方文档 The following example describes the most basic level of operations tha ...

  3. php 接收blob数据流,base64数据流 转为 blob二进制数据流

    php正常接收参数的方式如下:$_GET$_POST$_REQUEST 但是如果跨语言接收请求参数的话,可能会出现一系列的问题,其他语言的http请求可能是基于数据流的概念来传递参数的,如果按照常规处 ...

  4. Golang两种执行流程以及区别

    Go语言的执行方式有两种,一种是编译后再执行,另一种直接go run执行. 一.先编译后执行 .go文件(源代码)--->go build指令把源代码编译(如果是windows下会编译出一个.e ...

  5. android 颜色值参考,(有颜色图

    ) 2011-10-13 19:55:30| 分类: android | 标签:android颜色值|字号大中小 订阅 Android 常用RGB值以及中英文名称   颜 色 RGB值 英文名 中文名 ...

  6. 02:MongoDB操作

    1.1 MongoDB 增加 1.插入数据 1. 插入文档: insert 如果插入数据的时候,collection还不存在,自动创建集合 2. insertOne: 插入一条数据 3. insert ...

  7. Android之Sqlite数据库

    数据库访问完毕后,游标必须也记得关闭 import com.huangzhong.love_power_model.UserInfoDto; import java.util.ArrayList; i ...

  8. Codeforces Round #479 (Div. 3)题解

    CF首次推出div3给我这种辣鸡做,当然得写份博客纪念下 A. Wrong Subtraction time limit per test 1 second memory limit per test ...

  9. Selenium Webdriver弹出框的种种类型

    普通弹出框 div 一般这种 弹出框都属于dom的一部分,我们查看一下页面源码就可以定位到改弹出框了,然后定位下右上角的那个关闭, 这里有id,所以很方便通过 dr.findElement(By.id ...

  10. Codeforces 946 D.Timetable-数据处理+动态规划(分组背包) 处理炸裂

    花了两个晚上来搞这道题. 第一个晚上想思路和写代码,第二个晚上调试. 然而还是菜,一直调不对,我的队友是Debug小能手呀(真的是无敌,哈哈,两个人一会就改好了) D. Timetable   tim ...