【JAVA】Lambda接口&函数级接口
2023-09-11 14:20:37 时间
Lambda接口只用于函数级接口中,它常常被用在匿名类中,而
函数级接口————接口里面只有一个函数的接口。
标识接口————接口里面什么函数都没有的接口。
以上只是对相关概念的简述,具体解释要依靠具体代码来讲解:
//函数级接口
interface T1 {
void t();
}
//有返回类型的函数级接口
interface T2 {
//这里面有一个参数a
int t(int a);
}
//有返回类型的函数级接口
interface T3 {
//这里面有两个参数a和b
int t(int a,int b);
}
/*匿名类一般是用Lambda接口写的*/
public class Lambda {
//Lambda接口只用于函数级接口,那什么又是函数级接口?
//函数级接口:接口里面只有一个函数的接口。
//标识接口:接口里面啥函数都没有的接口。
public static void main(String[] args) {
// 我们可以先在这里new一个匿名类,
// 再在其后面加上一对大括号。
// 若我们要实现该类里面的方法,
// 就可以用Alt+Enter键对该方法进行实现。
// 在这里我们再运用多态的原理,直接用T类型引用该子类。
// 因为,我们new的这个对象就是T接口的子类或实现类。
// 如果我们这个接口里有很多函数,
// 我们就用List,如果只有一个,我们就不用这么写了。
// T a=new T() {
// @Override
// public void t() {
// System.out.println("Hello");
// }
// };
//对于函数级接口,我们不用上述的方法写。
//由于该方法,没有参数,我们就用圆括号来代表参数。
//实现的大括号写到箭头后面,如果大括号里只有一句话,
//我们就直接将这句话写进输出里头就可以了。
//箭头为"指向"的意思,
//因为这个接口里只定义了一个没参数的函数。
//而要实现的就是这个没参数的函数,
//我们的实现就写到箭头后面,直接写输出就行。
//箭头后面是T1接口的子类
T1 a = () -> System.out.println("Hello");
//而我们要调用该方法的话,因为是无参函数。
//我们这里就用t()来代替。
//函数级接口,用Lambda语法代替匿名类,会更紧凑一些。
//但是,该方法只能用于函数级接口
a.t();
//对于无参函数,如果输出语句比较多,就要加大括号。
//箭头后面是T1接口的子类
T1 b = () -> {
System.out.println("Hello");
System.out.println("Hello");
};
//对于下面有参数的函数级接口,如果箭头后只有一个语句,
//就直接写运算语句,且不用写返回值。
//如果是多行语句就需要加大括号,并且要写返回值。
//如果,函数级接口里面有了一个参数。
//我们就可以直接在等号后面定义一个不重名的参数,
//可以不用跟初始定义参数名一样。
//箭头后面是T2接口的子类
T2 c = aa -> aa * 2;
System.out.println(c.t(20));
//对大括号里头的程序进行执行之后,
//本来是要返回结果的,因为这个函数是返回的,
//所以自动就返回结果了。
//如果是多行语句就需要加大括号,并且有要写返回值。
//大括号里即是T2接口的子类
T2 d = cc -> { cc *= 2;cc += 2;return cc; };
System.out.println(d.t(30));
//如果,函数级接口有多个参数
//大括号里即是T3接口的子类
T3 e = (ab, ba) -> ab + ba;
System.out.println(e.t(20, 30));
}
}
相关文章
- Java 枚举7常见种用法
- Java 面向对象 初探
- Java图片加水印
- Java当中读取Json文件转换为Java对象
- Java核心技术卷I基础知识3.10.6 多维数组
- Java Date Time 教程-java.util.Date
- Predicate和Consumer接口– Java 8中java.util.function包下的接口
- 解决:Caused by: java.lang.ClassNotFoundException: org.springframework.core.metrics.ApplicationStartup
- 卫士通2014校园招聘笔试题(成都站,Java开发岗)——2014.09.29
- 《C++ AMP:用Visual C++加速大规模并行计算》——3.7 使用restrict(amp)标记的函数
- Java 并发工具包 java.util.concurrent 大全
- Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分
- Java 静态泛型方法为什么要在返回值之前使用泛型
- Java打印输出:java在线8x8x
- 犯众怒?业内怀疑甲骨文公司在加重对Java的把持力度
- 【华为OD机试真题 java、python】递增字符串(100%通过+复盘思路)
- 『Java练习生的自我修养』java-se进阶³ • 线程的等待与唤醒
- Java中的set集合如何理解(三)——精简
- 【Java UI】HarmonyOS 如何集成SlidingDrawer组件
- 【JAVA】Exception in thread "main" java.lang.NoClassDefFoundError
- 【JAVA】综合案例——聊天程序
- 《编程导论(Java)·2.1.2 啊,我看到了多态》-什么是多态(polymorphism)
- EasyLog:一个支持百亿级别的 Java 分布式日志组件
- 【Java笔记】配置文件java.util.Properties类的使用
- Java八种基本数据类型&字符串&运算符(图文详解)
- Java的流程控制(选择结构语句 if ~ switch &循环结构语句dowhile ~ for)