匿名内部类对象

牢记:当一个方法传入一个接口类型的参数,那么这个方法在被调用的时候,必须传入一个: 实现了该接口的实现类的对象

点击查看代码
copy
Interface 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. 默认方法
  2. 静态方法
    1.9
  3. 私有方法
  4. 私有静态方法

函数式接口

有且仅有一个抽象方法的接口,称为函数式接口.

  • 消费型接口: Consumer
  • 生产型接口: Supplier
  • 转换接口: Funtion
  • 断言「判断」Predicate

Lambda表达式

引入

如果你要使用Lambda表达式,则必须是: 函数式接口.

  • 目的: 简化匿名内部类操作
  • 想把一个方法赋值给一个匿名内部类对象.
    • 直接找接口当中定义的抽象方法.

(类型 方法的形式参数1, 类型 形参2 ..... 「名字随便」) -> {
// 方法体.实现了接口的实现类当中的重写的接口的抽象方法的方法.
}

简化

  1. 如果只有一个参数,小括号可以省略掉.
  2. 形式参数的类型可以省略掉.
  3. 如果方法体当中只有一条语句,大括号可以省略.
  4. 如果方法有返回值, 并且方法体当中只有一条语句.那么: 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); // 入参就是原类型, 出参就是转换完的类型. }

函数式接口的总结

image

其他分类

  • ava.util.function包下
    • bi, 原来是一个参数,这里带bi就两参数.
    • Longxxx/Intxxx, 表示入参是Long/int
    • toLong....表示出参是Long类型的
posted @   卡卡罗特kk  阅读(20)  评论(0编辑  收藏  举报
相关博文:
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
展开