匿名内部类对象
牢记:当一个方法传入一个接口类型的参数,那么这个方法在被调用的时候,必须传入一个: 实现了该接口的实现类的对象
点击查看代码
copyInterface Fly{
void fly();
}
// 调用useFly方法.
// 1. 直接写一个Fly接口的实现类.
实现类 实 = new 实现类(); // 自己定义的实现类
useFly(实)
// 2. 接口的引用指向实现类的对象.
Fly fly = new 实现类();
useFly(fly);
// 以上两种姿势都不太好. 接口当中最重要的一个内容就是抽象方法,所有的功能与逻辑都是写
在抽象方法当中的,「实现类要进行重写抽象方法,定义自己的逻辑.」. 焦点就放在抽象方法上就行了.至于
这个实现的类名称无所谓.
// 3. 这里要注意: new不是接口,是一个实现了Fly接口的实现类.
Fly fly = new Fly(){
@Override
public void fly(){
// 核心逻辑写在这里就行了.
}
};
useFly(fly);
// 4. 去掉了临时变量,直接将匿名内部类对象写在实参的位置.
useFly(new Fly(){
@Override
public void fly(){
// 核心逻辑写在这里就行了.
}
});
}
public static void useFly (Fly fly){
}
}
// 方法的声明/定义.
// 参数的作用: 告诉这个方法的调用者,这里需要一个Fly类型的参数.必须是这个类型的
接口新特性
1.8
- 默认方法
- 静态方法
1.9 - 私有方法
- 私有静态方法
函数式接口
有且仅有一个抽象方法的接口,称为函数式接口.
- 消费型接口: Consumer
- 生产型接口: Supplier
- 转换接口: Funtion
- 断言「判断」Predicate
Lambda表达式
引入
如果你要使用Lambda表达式,则必须是: 函数式接口.
- 目的: 简化匿名内部类操作
- 想把一个方法赋值给一个匿名内部类对象.
- 直接找接口当中定义的抽象方法.
(类型 方法的形式参数1, 类型 形参2 ..... 「名字随便」) -> {
// 方法体.实现了接口的实现类当中的重写的接口的抽象方法的方法.
}
简化
- 如果只有一个参数,小括号可以省略掉.
- 形式参数的类型可以省略掉.
- 如果方法体当中只有一条语句,大括号可以省略.
- 如果方法有返回值, 并且方法体当中只有一条语句.那么: return,大括号都可以省略掉.
# 注意:使用Lambda表达式的前提必须是: 函数式接口
Consumer
重点:
- accept(T t), 只有入参没有出参
- 实际上,咱们如果自己写代码,很少去使用.大部分集中集合部分,内置的api当中大量的应用了
- Consumer
, 尤其是Stream当中.
点击查看代码
copy@FunctionalInterface
public interface Consumer<T> {
void accept(T t); // 干吃不拉.只有入参,没有出参.
}
Supplier
点击查看代码
copy@FunctionalInterface
public interface Supplier<T> {
T get(); // 重点这个方法: 没有入参.只有出参. 生产型接口. 光拉不吃.
}
生产型接口.
重点方法: T get();
Predicate
点击查看代码
copy@FunctionalInterface
public interface Predicate<T> {
boolean test(T t); // 测试的意思.传入这个方法的参数,如果能通过指定的测试,则返回的结果是
true, 否则结果是false;
}
注意:
这个接口被称为断言/判断接口.
重要的方法:
boolean test(T t); // 对传入的内容进行判断.如果判断成立, 则返回true,否则false.
Function
点击查看代码
copy@FunctionalInterface
public interface Function<T, R> { // T, 表示你将要转换的类型, 原类型.譬如说,现在把
String, Integer, 那么现在的T就是String. R, 目标类型, 这里R就可以写成Integer
R apply(T t); // 入参就是原类型, 出参就是转换完的类型.
}
函数式接口的总结
其他分类
- ava.util.function包下
- bi, 原来是一个参数,这里带bi就两参数.
- Longxxx/Intxxx, 表示入参是Long/int
- toLong....表示出参是Long类型的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步