package cn.t02;/*** 函数式接口:* 函数式接口即适用于函数式编程场景的接口,在Java中函数式编程的体现是Lambda.* 因此函数式接口可以适用于Lambda使用的接口.* 只有在确保接口中有且只有一个抽象方法时,Java中的Lambda才能顺利的推导!** 语法糖:语法糖是指使用更加方便,但是原理不变的代码语法.* 例如:集合遍历使用的for-Each语法,其底层实现原理是迭代器.* 那for-Each对于迭代循环代码来说就是他的语法糖!** 而Lambda在应用层面来看,可以把其当作匿名内部类的语法糖.(二者原理上不一样)** @FunctionalInterface:* 为了保证接口中有且只有一个抽象方法,Java中提供了一个用来验证的注解;* 一旦在接口上标注了@FunctionalInterface,编译器就会强制检查接口是否有且只有一个* 抽象方法,否则就会报错.** 需要注意:即使不使用@FunctionalInterface注解,只要满足函数式接口的定义,就仍然是* 一个函数式接口,使用起来效果是一样的!**/
@FunctionalInterface
public interface FunctionGo {/*** 接口中抽象方法的public abstract可以省略!*/void gooing();
}/*** 外部类:* 用来临时测试!*/
class Test {/*** 调用自定义函数式接口:* 最典型的方法就是将其作为方法参数;** 使用自定义的函数式接口作为方法参数!* @param fg*/private static void goining(FunctionGo fg) {// 调用自定义函数式接口的方法!fg.gooing();}/*** Java主函数|入口!* @param args*/public static void main(String[] args) {/*** 调用使用函数式接口的方法;*/goining(() -> {System.out.println("123");System.out.println(888);});}
}