IT评测·应用市场-qidao123.com

标题: Java中的Lambda详细解读 [打印本页]

作者: 科技颠覆者    时间: 2023-4-27 21:06
标题: Java中的Lambda详细解读
Lambda是JDK1.8新引进的简化代码语法格式,可以替代匿名内部类。
  1. //以下代码对比一下两者写法上的区别
  2. interface Alarm{
  3.         void display();
  4. }
  5. public class Lambda{
  6.         public static void main(String[] args){
  7.         Alarm a=new Alram(){
  8.                 @Override
  9.                 public void display(){
  10.                         System.out.println("我是匿名内部类实现的方法");
  11.                 }
  12.         }
  13.         //简化代码
  14.         Alram b=()->System.out.println("我是lambda表达式实现的方法");
  15.         }
  16. }
复制代码
Lambda语法

接口 变量名=(参数名称以及个数)->{实现方法};
函数式接口:

  1. //声明该接口为函数式接口
  2. @FunctionalInterface
  3. interface AlarmNoArg{
  4.         void display();
  5. }
  6. @FunctionalInterface
  7. interface AlarmOneArg{
  8.         String display(String one);
  9. }
  10. @FunctionalInterface
  11. interface AlarmTwoArg{
  12.         public final int arg=1;
  13.         public abstract int display(int a,int b);
  14. }
  15. interface AlarmThreeArg{
  16.         defalut void m1(){
  17.                 //逻辑
  18.         }
  19.         void display(int[] arr);
  20. }
  21. public class Example{
  22.         public static void main(String[] args){
  23.         AlarmNoArg a=()->System.out.prinln("一行代码可以省略{}");
  24.         a.display();
  25.         AlarmOneArg b=(name)->name;
  26.         //一行代码缺省{}情况下 可以直接返回值
  27.         b.display("张三");
  28.         //两个参数 参数名随便写 符合java变量名规范就行
  29.         //返回值不是void 写结构体{}必须写return
  30.         AlarmTwoArg c=(a,b)->{return a+b;};
  31.         c.display(1,2);
  32.         //数组引用
  33.         AlarmThreeArg d=(arr)->{
  34.                 for(int i:arr){
  35.                         System.out.println(i);
  36.                 }
  37.         };//分号别忘啦
  38.         d.display(new int[]{1,2,3,4})
  39.         }
  40. }
复制代码
::运算符的使用

保证方法参数数量/顺序/返回值一致 否则编译错误
  1. @FunctionalInterface
  2. interface Lam1{
  3.         int sum(int a,int b);
  4. }
  5. interface Lam2{
  6.         String get();
  7. }
  8. interface Lam3{
  9.         Example create(String name,int age);
  10. }
  11. class Example{
  12.         public static int isSum(int m,int n){
  13.                 return m+n;
  14.         }
  15.         public String getName(){
  16.                 return "马齐";
  17.         }
  18.         public Example1(String name,int age){
  19.                 this.name=name;
  20.                 this.age=age;
  21.     }
  22.     public Example1(){}
  23.         public static void main(String[] arg){
  24.                 //绑定静态方法
  25.                 Lam1 a=Example::isSum;
  26.                 a.sum(1,2);
  27.                 //绑定实例方法
  28.                 Example obj=new Example();
  29.                 Lam2 b=obj::getName;
  30.                 b.get();
  31.                 //绑定构造方法
  32.                 Lam3 c=Example::new;
  33.                 Example e=c.create("张三",21);
  34.         }
  35. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4