「编程」你真的完全弄懂了函数式编程么?( 二 )
②子类重写后的equals方法 。
父类引用指向子类引用 , 调用的是子类重写后的方法 。
该子类的父接口调用该方法 , 也是子类重写后的方法 , 但是子类其实重写的是Object(父类)中的方法 。
其中equals方法只是例子 , Object中的所有方法都适用 。
所以什么叫函数式接口?
有且仅有一个抽象方法的接口(需要被重写) , 进一步作出了补充 , 让自己对其的理解更加地完善 。
二、函数式编程回顾1.lambda表达式应用
①面向接口编程
方法参数有一个为接口 , 但是接口是没法实例化创建对象的 , 所以必然会有多态:需要传入该接口的实现类对象 。
为了简化代码 , 不想创建一个实现类 , 那么就可以直接使用匿名内部类或lambda表达式 。
②lambda表达式
方法中有两个参数 , 第一个为name , 第二个即为lambda表达式 。
lambda表达式本质上就是对应接口的实现类对象 , 该例子是作为方法参数 , 也可以作为方法返回值 。
如何更好地理解该表达式?
就可以将其理解成实现类重写方法中的参数和内容 , 也就是用什么参数 , 做了一件什么事情 。
所以写lambda表达式时 , 脑海里想着对应接口的实现类重写的方法就好了 。
2.Lambda的延迟执行
场景:一种典型的场景就是对参数进行有条件使用(日志案例)
①printLog方法:根据等级打印日志
方法有两个参数 , level和msg 。
一共有3个等级:
- level为1时 , 表示情况最严重 , 我得打印日志 。
- level为2时 , 表示情况警告 , 不用打印日志 。
- level为3时 , 表示情况正常 , 也不用打印日志 。
level有123三个等级 , 日志只有msg需要打印 。
那么现在问题来了:
当level为1时 , 自然没问题;
但是level为2时 , 为3时 , msg也被作为参数带入方法了 , 也就是说msg执行到了 , 但是实际上并没有用到它 , 从而造成性能浪费 。
那这个问题如何解决?就是使用lambda表达式:
①当level等于1时
这段代码就是函数式编程 。
多态:父类(接口)引用调用buildMsg方法 , 执行的就是子类(实现类)重写的方法 。
重写的方法是啥?
就是②中的lambda表达式 。
②当level等于2 , 等于3时
只有当level为1时 , buildMsg方法才被调用 , 重写的方法才会执行;
当level不等于1时 , 方法根本就没有执行 , 相比较一开始写的代码而言 , 更加地节约资源 。
所以综上所述:函数式编程有哪些好处?
- 增加了代码拓展性 。
- 某种情况下 , 更加地节约了资源 。
- 韦世良Sir|它真的是个生命体吗?,卫星拍到地球正在自我清理
- 『土星』哈雷“地心说”是真的?地球是个多层嵌套的空心圆?看看这些证据
- 志霖美丽新娱乐啊|12配置完全曝光,高刷新率未能实现,台积电要忙起来了,iPhone
- 数码智玩|或许iphone12真的没有标配充电器,iphone发起USB电源适配器调查
- 【】从不落地的“无脚鸟”,连睡觉都在天上,它真的一辈子都在飞吗?
- UFO:1985年在新墨西哥,发现带有中国汉字的金属碎片,这是真的吗?
- 课工场郑州翔天信鸽|JavaScript最常用,java是主流,JetBrains公布编程语言排名
- ▲海底3700米下拍到的一张图,让人不禁疑惑:这真的还是地球吗?
- 『程序员』程序员多次劝说邻居,不要让孩子去学编程,结果蒙了
- 黑丝科技|我们该反思了,真的要抵制苹果吗?看看iPhone手机背后的那句话