关于lambda表达式的两点使用

一、lambda表达式访问变量

        lamda表达式里可以访问成员变量和局部变量,但是访问局部变量时默认变成final修饰,即不可改变,否则,编译不过去;成员变量可以修改。

public class LambdaTest {
    private static int j;
    private int k;
    public static void main(String[] args) {
        LambdaTest t = new LambdaTest();
        t.test();
        t.test();
    }

    public void test(){
        int num = 10;
        j = 20;
        k = 30;

        //lambda表达式中可以访问成员变量也可以方法局部变量
        Action5 a5 = (i)->System.out.println("操作后:"+i+(num+j+k));
        a5.run(1);
        //但是这个被访问的变量默认变为final修饰的 不可再改变 否则编译不通过
        //num = 60;
        //成员变量可以修改
        j = 50;
        k = 70;
        System.out.println("j="+j+",k="+k);
    }

}

interface Action5{
    public void run(int i);
}

2、lambda表达式中关键字::的运用

直接上代码:、

interface Action<T>{
    public void run(T t);
}

class Model{

    public void test1(){
        System.out.println("test1");
    }
    public void test2(Model a){
        System.out.println("test2");
    }
    public int test3(){
        System.out.println("test3");
        return 1;
    }
}
public class LambdaTest1 {

    public static void main(String[] args) {

        Model m = new Model();

        //一般的实现方式:方法有一个参数,然后没返回类型,这里参数类型会自动识别
        Action<Model> a1 = (s)->System.out.println("hello");
        a1.run(m);

        //特殊用法:test3()的入参与返回值与run()的并不一样,但是这里却可以用。
        //注意:如果这里泛型类型不是Model 那么就不能引用Model中的方法
        //可以引用Model类中任意方法 只要满足一点:该方法没有参数
        //将来run方法中就会调用Model类型对象m的此处引用的方法
        Action<Model> a2 = Model::test3;
        a2.run(m);

        //引用对象m中的test2方法
        //因为test2方法的参数和返回类型和Action接口的方法完全一致
        Action<Model> a3 = m::test2;
        a3.run(m);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值