Java中将函数作为参数进行传递
最近一直在做一个项目的前端,使用的框架是vue,还有一些基于vue的组件库,学习了很多js的相关内容。今天突然想看一下Java,发现好久不看忘记了许多,还是希望每天晚上可以写点博客,当做学习,复习的方式,也改变一下我拖拖拉拉的行事,希望可以坚持下去,加油,打工人!
Java中将函数作为参数进行传递
现在了解到的有两种:Java8之前,一个常见的模式是将它“包装”在一个界面中,例如Callable接口,然后传入一个Callable。Java8以及之后就是今天学到的一种方法,通过Java8的新特性lambda表达式
首先简单介绍一下Java lambda表达式
Java8之后,接口被进行了拓展,除了有一些object类中的方法(emmm怎么说呢,接口和object类的关系不是继承,有些暧昧,有可能是接口隐形的实现了object类中的方法,就是toString()等方法),还可包含默认方法和静态方法(仅可被接口自身调用,不可被继承),除此之外,均为不可有方法体的抽象方法,当接口有且仅有一个抽象方法时,lambda就可以登场了
现在有一个Greeting接口,我们想要直接实现并使用它的唯一一个抽象方法sayMessage(String message)而不想去创建一个对象并实现该接口(原谅我吧,本人菜鸡,还没做过真正的后端,想象不到一个合理的需求场景),原来的话,可能会这样写
package com.suibian.www.java;public class LambdaDemo {public static void main(String[] args) {Greeting greeting = new Greeting() {@Overridepublic void sayMessage(String message) {System.out.println("Hello" + message);}};greeting.sayMessage("World");}
}@FunctionalInterface
interface Greeting {//唯一的抽象方法void sayMessage(String message);//默认方法default void defaultMethod(){System.out.println("默认方法");}//静态方法static void staticMethod(){System.out.println("静态方法");}
}
运行结果为:
HelloWorld
使用lambda之后
public class LambdaDemo {public static void main(String[] args) {Greeting greeting = (message) -> System.out.println("Hello" + message);greeting.sayMessage("World");}
}
运行结果为:
HelloWorld
很帅有没有,一下就变得高大上而且简单了许多(好吧我开玩笑的,但可读性确实提高了许多)
重点来了,有了上面的结果,也许你已经轻易地想到了为什么可以使用函数当做参数进行传递。 困了困了,直接上代码
package com.suibian.www.java;public class LambdaDemo {public static void main(String[] args) {testLambda(() -> 180);}public static void testLambda(Flyable flyable) {System.out.println("飞行速度为" + flyable.getFlySpeed() + "m/s");}
}interface Flyable {int getFlySpeed();
}
运行结果为:
飞行速度为180m/s
成功!testLambda()以实现了接口Flyable的对象为参数,所以我们只要通过lambda实现该接口的唯一一个抽象方法并直接当做参数传入就好,只不过将多步放在一步进行操作。
这是我的第二篇博客,也可能因为想说的比较多,表述能力又比较弱,而且很菜,所以啰啰嗦嗦的说了些没用的,希望大家不要介意,本文可能有很多错误的地方,毕竟很久没看Java了,被js自由的风格惯坏了(我差点忘了主函数怎么写,好几次写方法没加返回类型(js是动态类型语言),傻了傻了),希望有大佬看到帮忙指正,一定尽快改正。
Java中将函数作为参数进行传递相关推荐
- java 方法当参数_如何在Java中将函数作为参数传递?
如何在Java中将函数作为参数传递? 这个问题在这里已有答案: Java Pass方法作为参数 14个答案 是否可以将方法作为参 ...
- 如何用auto_ptr做为函数的参数进行传递
auto_ptr跟指针的原理是一样的,只不过在使用会自动释放内存.但是在函数中作为auto_ptr参数使用时,一定要注意控制权的转移问题. void testptrAddNumber(MCMDTLog ...
- js函数中参数的传递
先看一道JS的笔试题: var setObj=function(o){o.name="xiaoming";o={};o.name="xiaohong"; } v ...
- 《从零开始学Swift》学习笔记(Day 20)——函数中参数的传递引用
原创文章,欢迎转载.转载请注明:关东升的博客 参数的传递引用 类是引用类型,其他的数据类型如整型.浮点型.布尔型.字符.字符串.元组.集合.枚举和结构体全部是值类型. 有的时候就是要将一个值类型参数以 ...
- 函数中参数的传递的几种方式与区别
关于C与C++中函数的变量传递方式的总结归纳 其大致可以分为传递参数,传递地址,传递数组,传递引用类型 1 传递数值 2. 传递地址即操作指针变量(C语言的指针操作) 3.传递数组 4. 传递引用类型 ...
- java 函数 作为参数_如何在Java中将函数作为参数传递?
小编典典 Java 8及以上 如果你的类或接口只有一个抽象方法(有时称为SAM type),则使用Java 8+ lambda表达式,例如: public interface MyInterface ...
- adb shell 修改文件名_从零开始学Linux运维|27.Shell编程(函数与参数的传递)
1.函数 shell可以定义函数,方便调用,定义函数的格式 中括号"[]"内的内容可以省略 [ function ] 函数名 [()]{执行语句;[return 返回值;]} 写一 ...
- 关于java重载函数,参数为null时,调用的处理。(精确性原则)
关于以下程序的输出结果 public class TestNull { public void show(String a){ System.out.println("String" ...
- 小议C++中函数的参数的传递
c++中为每一个函数都维护了一个运行栈(活动记录),这个栈存储了与该函数相关的一系列信息,包括函数中声明的变量,传递给函数的实际参数,以及该函数的返回地址等,使用gdb调试器可以清楚的看到这一切.当调 ...
最新文章
- 深夜,我偷听到程序员要对session下手……
- 世界级Linux技术大师首次公开大量技术内幕
- iphone Quartz2D使用心得
- librtmp分析(发送数据包处理)
- php nginx 实时输出,phpnginx实时输出实现方法分享
- __call、__set 和 __get的用法
- python画xy轴折线在拐点处加汉字_解决python中画图时x,y轴名称出现中文乱码的问题...
- 车辆贷款违约预测 Top1(2021科大讯飞)
- python语言的两种注释方法_python中编写注释的方法
- android实战技巧,实战技巧:Android异步指南
- 计算机cad图块,CAD图块的操作及概念
- Windows 编程之 WINUSERAPI 和 WINAPI 区别
- 含有共轭复数根的Jordan分解
- 同时使用动态库和静态库时怎么写makefile
- Linux下配置日志服务器
- alg 停用sip_为什么使用3CX要关闭SIP ALG
- 衣服不管染上什么,用这招都能洗掉!99%的人不知道!
- Eth-Trunk负载分担不均怎么办,如何通过Hash算法实现负载分担?
- b站coderwhy老师_Vue项目开发-仿蘑菇街电商APP
- STM32F407--芯片解读