最近一直在做一个项目的前端,使用的框架是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中将函数作为参数进行传递相关推荐

  1. java 方法当参数_如何在Java中将函数作为参数传递?

    如何在Java中将函数作为参数传递? 这个问题在这里已有答案: Java Pass方法作为参数                                     14个答案 是否可以将方法作为参 ...

  2. 如何用auto_ptr做为函数的参数进行传递

    auto_ptr跟指针的原理是一样的,只不过在使用会自动释放内存.但是在函数中作为auto_ptr参数使用时,一定要注意控制权的转移问题. void testptrAddNumber(MCMDTLog ...

  3. js函数中参数的传递

    先看一道JS的笔试题: var setObj=function(o){o.name="xiaoming";o={};o.name="xiaohong"; } v ...

  4. 《从零开始学Swift》学习笔记(Day 20)——函数中参数的传递引用

    原创文章,欢迎转载.转载请注明:关东升的博客 参数的传递引用 类是引用类型,其他的数据类型如整型.浮点型.布尔型.字符.字符串.元组.集合.枚举和结构体全部是值类型. 有的时候就是要将一个值类型参数以 ...

  5. 函数中参数的传递的几种方式与区别

    关于C与C++中函数的变量传递方式的总结归纳 其大致可以分为传递参数,传递地址,传递数组,传递引用类型 1 传递数值 2. 传递地址即操作指针变量(C语言的指针操作) 3.传递数组 4. 传递引用类型 ...

  6. java 函数 作为参数_如何在Java中将函数作为参数传递?

    小编典典 Java 8及以上 如果你的类或接口只有一个抽象方法(有时称为SAM type),则使用Java 8+ lambda表达式,例如: public interface MyInterface ...

  7. adb shell 修改文件名_从零开始学Linux运维|27.Shell编程(函数与参数的传递)

    1.函数 shell可以定义函数,方便调用,定义函数的格式 中括号"[]"内的内容可以省略 [ function ] 函数名 [()]{执行语句;[return 返回值;]} 写一 ...

  8. 关于java重载函数,参数为null时,调用的处理。(精确性原则)

    关于以下程序的输出结果 public class TestNull { public void show(String a){ System.out.println("String" ...

  9. 小议C++中函数的参数的传递

    c++中为每一个函数都维护了一个运行栈(活动记录),这个栈存储了与该函数相关的一系列信息,包括函数中声明的变量,传递给函数的实际参数,以及该函数的返回地址等,使用gdb调试器可以清楚的看到这一切.当调 ...

最新文章

  1. 深夜,我偷听到程序员要对session下手……
  2. 世界级Linux技术大师首次公开大量技术内幕
  3. iphone Quartz2D使用心得
  4. librtmp分析(发送数据包处理)
  5. php nginx 实时输出,phpnginx实时输出实现方法分享
  6. __call、__set 和 __get的用法
  7. python画xy轴折线在拐点处加汉字_解决python中画图时x,y轴名称出现中文乱码的问题...
  8. 车辆贷款违约预测 Top1(2021科大讯飞)
  9. python语言的两种注释方法_python中编写注释的方法
  10. android实战技巧,实战技巧:Android异步指南
  11. 计算机cad图块,CAD图块的操作及概念
  12. Windows 编程之 WINUSERAPI 和 WINAPI 区别
  13. 含有共轭复数根的Jordan分解
  14. 同时使用动态库和静态库时怎么写makefile
  15. Linux下配置日志服务器
  16. alg 停用sip_为什么使用3CX要关闭SIP ALG
  17. 衣服不管染上什么,用这招都能洗掉!99%的人不知道!
  18. Eth-Trunk负载分担不均怎么办,如何通过Hash算法实现负载分担?
  19. b站coderwhy老师_Vue项目开发-仿蘑菇街电商APP
  20. STM32F407--芯片解读

热门文章

  1. 从无栈协程到 C++异步框架
  2. Java---数据库---数据库DDL
  3. socket简介及java实例
  4. Centos7 Certbot 常用命令相关总结
  5. 国密SM1、SM2、SM3、SM4算法资料大全
  6. ​低代码平台的核心价值与优势
  7. fullcalendar应用(一)
  8. 下载卫星影像地图软件哪个好用?
  9. 民间版知乎用户分析报告
  10. Mobvista通过聆讯:上半年净利千万美元 同比降49%