29 匿名内部类、函数型接口、lamda表达式的引入
2024-10-21 07:57:10
匿名内部类
参考:https://www.runoob.com/w3cnote/java-inner-class-intro.html
进入后搜索匿名内部类。
函数型接口
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
例如,我们常用的Runnable接口,翻看源码发现,它只有一个抽象方法run,它就是一个函数型接口。
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
参考:https://www.runoob.com/java/java8-functional-interfaces.html
匿名内部类与函数型接口简化一个线程案例:
简化前:
package _20191203;
/**
* 创建线程的方法一:继承Thread
* @author UID
*
*/
public class ThreadTest{
public static void main(String[] args) {
new Thread(new ThreadRun()).start();//主要看这里
for(int i = 0;i < 200;i++) {
System.out.println("一边听歌");
}
} } class ThreadRun implements Runnable{
@Override
public void run() { //必需重写run方法
for(int i = 0;i < 200;i++) {
System.out.println("一边敲代码");
}
}
}
简化后:
package _20191203;
/**
* 创建线程的方法一:继承Thread
* @author UID
*
*/
public class ThreadTest{
public static void main(String[] args) {
new Thread(new Runnable(){ //主要看这里
@Override
public void run() {
for(int i = 0;i < 200;i++) {
System.out.println("一边敲代码");
}
}
}).start();
for(int i = 0;i < 200;i++) {
System.out.println("一边听歌");
}
}
}
引入lamda表达式
emm...不好讲啊。
上面的代码还可以使用lamda表达式进一步简化。
lamada时jdk 8 的新特性,它不是java独创的,实际上它来源自scale社区,并且被越来越多的程序中使用,它可以大大简化代码。
参考:https://baike.baidu.com/item/Lambda%E8%A1%A8%E8%BE%BE%E5%BC%8F/4585794?fr=aladdin
lamda表达式的使用方法参考:https://www.cnblogs.com/coprince/p/8692972.html
可以使用lamda表达式的接口就是函数型接口,在上面的案例中,Runnable接口就是一个函数型接口,所以这里我们可以使用lamda表示式对上面的例子进行简化:
public class ThreadTest{
public static void main(String[] args) {
//new Thread(new ThreadRun()).start();
new Thread(()->{ //主要看这里 lamda表达式
for(int i = 0;i < 200;i++) {
System.out.println("一边敲代码");
}
}).start();
for(int i = 0;i < 200;i++) {
System.out.println("一边听歌");
}
}
}
当抽象方法有参数时,对应写成的(参数)->{代码}
而且不必写参数类型
最新文章
- SageCRM 快速获取连接中的SID的方法
- SQList
- 利用CSS3D效果制作简易旋转木马效果
- 安装并配置前端自动化工具——grunt
- 数据结构看书笔记(二)--算法(Algorithm)简介
- javascript的escape()方法
- JMS【四】--Spring和ActiveMQ整合的完整实例
- 1001Sum Problem
- VC++6.0环境下调试c语言代码的方法和步骤_附图
- c#等待所有子线程执行完毕方法
- Avoiding “will create implicit index” NOTICE
- 编程内功修炼之数据结构—BTree(二)实现BTree插入、查询、删除操作
- NSFileManager的应用
- 全局文件 pch
- Java并发编程:volatile 关键字
- Oracle服务启动项
- Kafka技术内幕 读书笔记之(六) 存储层——服务端处理读写请求、分区与副本
- .net多站点通过StateServer实现session共享
- JavaScript错误:Maximum call stack size exceeded错误
- 使用windows性能计数器监控cpu使用率
热门文章
- c++中 string类型 转为 char []类型
- oracle的一些状态查询
- 7kyu kata
- 干货 | 10分钟教你用column generation求解vehicle routing problems
- 【NOIP2014】真题回顾
- 原创:logistic regression实战(一):SGD Without lasso
- 转载:基于 Hive 的文件格式:RCFile 简介及其应用---推酷
- 原创:自定义spark GraphX中的collectNeighborIds方法
- mysql upper() 函数
- node省市区三级数据性能测评