29 匿名内部类、函数型接口、lamda表达式的引入
匿名内部类
参考: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("一边听歌");
}
}
}
当抽象方法有参数时,对应写成的(参数)->{代码}
而且不必写参数类型
29 匿名内部类、函数型接口、lamda表达式的引入的更多相关文章
- 第六章 接口,lamda表达式与内部类
接口 接口可以包含常量, 且不需要publish static final修饰, 接口的域会自动添加该修饰符. Java建议不要写多余的代码,因此省略修饰符更简洁. 全部都是常量的接口背离了接口的初衷 ...
- 匿名函数和lamda表达式
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- c# 匿名函数和lamda表达式语法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Lamda表达式学习笔记一
Lamda表达式学习笔记一 一.Lamda语法诠释 三傻大闹宝莱坞的主人公兰彻说的一句话让我映像深刻:用简单的语言来表达同样的意 我并不是说书上的定义怎么怎么不对,而是应该理解书本上的定义,并用简单的 ...
- jdk8系列一、jdk8 Lamda表达式语法、接口的默认方法和静态方法、supplier用法
一.简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性. 在本文中我们将学习这些新特性,并用实际 ...
- Lambda01 编程范式、lambda表达式与匿名内部类、函数式接口、lambda表达式的写法
1 编程范式 主要的编程范式有三种:命令式编程,声明式编程和函数式编程. 1.1 命令式编程 关注计算机执行的步骤,就是告诉计算机先做什么后做什么 1.2 声明式编程 表达程序的执行逻辑,就是告诉计算 ...
- 委托、泛型委托、多播委托、匿名函数、lamda表达式、事件
1.为什么要使用委托 将一个方法作为参数传递给另一个方法 2.委托概念 public delegate int 委托名(int a, int b); 声明一个委托类型,可以用访问修饰符修饰,deleg ...
- 匿名内部类与lamda表达式
1.为什么要使用lamda表达式 从JDK1.8开始为了简化使用者进行代码开发,专门提供有Lambda表达式的支持,利用此操作形式可以实现函数式的编程,对于函数式编程比较著名的语言:haskell,S ...
- python 内置函数 lamda表达式。 open 文件方法
lamda 表达式 lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: 普通的条件语句 if 1 == 1: name = 'kaixin' else: ...
随机推荐
- springboot的HTTPS配置
- 洛谷P4343 [SHOI2015]自动刷题机
题目 易得该题目中的\(n\)和\(k\)具有单调性,满足二分的性质,因此该题目而已用二分来枚举\(n\),然后对于每个\(n\)模拟出它所对应的\(k\),然后注意注意代码细节,并且当当前\(k\) ...
- Eclipse Maven问题小记
Eclipse Maven Web工程报错:java.lang.ClassNotFoundException: ContextLoaderListener 原因:打包项目时没有把相关Maven依赖包打 ...
- GUI引发的一场脑部大战|wine、wsl、mono、gtk、qt
没写完不想写了,先发布吧,这就是一个引子. 在春天种下一颗种子---- GUI引发的一场脑部大战|wine.wsl.mono.gtk.qt 思路开拓了,方法一下子就来了 wine可以运行大部分Wind ...
- leetcode题目讲解(Python):字符串转整数 (atoi)
分析这道题,输入数据有如下几种情况: 第一类:输入字符串无法转换为整数 这一类包含以下几种情况: 输入字符串为空 开头字符为数字.符号(+,-).空格以外的字符 有多个加减符号的字符串 符号没有紧跟数 ...
- html 获取项目根路径
html 获取项目根路径 function getContextPath(){ var pathName = document.location.pathname; //当前文件的绝度路径 var i ...
- ·分布式文件系统HDFS 练习
作业要求来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3292 1.目录操作 在HDFS中为hadoop用户创建一个用户目录( ...
- 第06组 Alpha冲刺(6/6)
队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 主要完成了个人主页模块的接口设计 完善后端的信息处理 GitHub签入记录 接下来的计划 ...
- clion 查看代码 多次查看后如何一步一步回退到最初查看的代码位置
在settings->keymap里面搜索navigate,然后就有蓝色字体的Back.Forward,这个两个有自己对应的快捷键,但是你有可能不能使用这个功能,因为在不同的操作系统里面,有可能 ...
- Python3教程—很经典可以快速上手
原文地址:https://www.runoob.com/python3/python3-tutorial.html Python 3 教程 Python 的 3.0 版本,常被称为 Python 30 ...