关于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表达式的两点使用的主要内容,如果未能解决你的问题,请参考以下文章