java学习(Lambda)

Lambda语法特性

  1. 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  2. 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  3. 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  4. 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

以上就是Lambda的语法,比较简单。

针对Lambda语法,我们能够替代使用的都是函数式接口,Lambda语法是函数式接口的实现。什么是函数式接口?函数式接口指的是只包含一个方法的接口。接口上使用@FunctionalInterface注解进行声明,可以不声明,但是为了防止后续有其他人员添加方法,最好加上。

下面针对Lambda的使用场景进行描述

一、匿名内部类

语法

(parameters) -> expression
或
(parameters) ->{ statements; }

代码中Runnable的实例,等于右边Lambda语法,相当于该语法实现了一个匿名内部类的对象。因此Lambda可以用来简写匿名内部类,如Runnable、View的事件回调方法等

 new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("The old runable now is using!");
            }
        }).start();
    //可以将Lambda表示为一个接口实现的语法,比较好理解。
    Runnable runnable = () -> System.out.println("The old runable now is using!");
    new Thread(runnable).start();</code></pre><p> 二、方法引用</p><p><span style="color:rgb(68,68,68);font-family:'microsoft yahei';font-size:14px;">左边可以是类名或者实例名,中间是方法引用符号”::”,右边是相应的方法名</span><br /></p><pre><code class="language-java">ObjectRef::methodName</code></pre><p>1. 静态引用。(将静态方法,引用作为指定接口的实现)</p><p>声明一个接口</p><pre><code class="language-java">public interface LambdaF {
boolean test(int a);

}

指定另外一个类中的静态方法当做接口的具体实现方法。接口和实现类的方法名可以不一样,但是参数和返回值和接口保持一致。

public class LambdaTest {
public static boolean test1(int a) {
    return a == 0;
}

}

具体使用

     LambdaF iTest = LambdaTest::test1;
boolean b = iTest.test(1);
System.out.print(b+"");

2.类方法(将类方法,引用作为指定接口的实现)

声明接口(同上静态方法声明的接口)

public interface LambdaF {
boolean test(int a);
}

指定一个实现方法

public class LambdaTest {
  public boolean test2(int a){ 
return a ==1; 
  }

}

具体调用,将LambdaTest中test2方法作为接口的具体实现

        LambdaTest lambdaTest = new LambdaTest();
LambdaF iTest2 = lambdaTest::test2;
System.out.println(iTest2.test(1)+"");

三、接口拓展。默认方法实现。

声明一个接口。用default来写几个默认实现方法。

@FunctionalInterface
public interface EventListener {
void onListener(String str);
default void listener(String str) {
    System.out.println(str);
}
default void listener1(String str) {
    System.out.println(str);
}

}

具体使用

 EventListener eventListener = str -> {};
eventListener.listener(“test3”);

转自: https://blog.csdn.net/meijian531161724/article/details/79762585
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值