关于lambda表达式的两点使用

Posted 八阿哥克星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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);
    

以上是关于关于lambda表达式的两点使用的主要内容,如果未能解决你的问题,请参考以下文章

Java8特性Lambda表达式

JDK8 新特性

java增量构建关于lambda表达式的问题

关于JAVA核心技术(卷一)读后的思考(lambda表达式的讨论)

关于python中lambda 函数使用小结

python lambda表达式