一文搞懂Java8 Lambda表达式、方法引用


体验λ

表达式让我们用一个小例子来体验 lambda 表达式;

我们定义了一个只有一个方法添加的计算接口;

公开课程序 {

public static void main(String[] args) {

Cal c1=new Cal() {

@Override

public int add(int a, int b) {

返回 A+B;

}

};

int c=c1.add(1,2);

System.out.println(c);

}

}

接口校准{int

add(int a,int b);

}

这是我们之前的实现,匿名内类,然后调用执行;

我们现在使用 lambda 表达式重写:

公开课程序 {

public static void main(String[] args) {

Cal c1=(int a,int b) ->{return a+b; };

int c=c1.add(1,2);

System.out.println(c);

}int

add(int a,int b){

返回 A+B;

}

}

接口校准{int

add(int a,int b);

}

匿名内部类,直接改为:

Cal c1=(int a,int b) ->{return a+b; };

更简洁;

是不是感觉lambda表达式很强大,

接下来,我们来看看 lambda 表达式的语法;

Lambda 表达式语法

让我们看看这个 lambda 表达式:

(int a,int b) ->{return a+b; };

这个本质是一个功能;

常规函数如下所示:int

add(int a,int b){

返回 A+B;

}

有返回值、方法名称、参数列表和方法主体

对于 lambda 表达式函数,只有一个参数列表和方法主体;

(参数列表) -> { 方法体 }

( ) :用于描述参数列表;

{ } : 用于描述方法主体;

->:Lambda运算符,可以称为箭头符号,或转到

注意:

1. Lambda 表达式要求接口是函数接口。

2. lambda 表达式引用的外部变量必须是事实的最终变量。也就是说,初始化后该值不会再次更改。(您无法更改 lambda 中外部变量的值。您也不能引用将在 lambda 中外部更改的值,无论该值是在执行 lambda 表达式之前还是之后在外部更改的)。

3. 声明与方法局部变量同名的参数是违法的

或与 lambda 表达式中方法的局部变量同名的局部变量。

4. 两个同名的局部变量不能

在方法中定义,因此 lambda 表达式中不能有同名的局部变量。

5. 在 lambda 表达式中使用 this 关键字是指 this

创建此 lambda 表达式的方法所属的类的参数。如:

公共类应用程序{

public void init(){

操作侦听器 侦听器 = 事件 -> {

System.out.println(this.toString());   

}

}

}

此处调用 Application 对象的 toString 方法,而不是 ActionListener 接口的实例对象的方法。

Lambda 表达式语法详细介绍

我们举个例子,接口方法(无参数、单参数、双参数)X(带返回值,无返回值)列出了这六种情况:

接口 If1{

/*** 无参数

,无参数

返回值 */

无效测试();

}

接口 If2{

/**

* 单个参数没有

返回值 * @param a

*/

无效测试(国际A);

}

接口 If3{

/**

* 两个参数没有

返回值 * @param a

* @param b

*/

无效测试(int a,int b);

}

接口 If4{

/**

* 没有参数有

返回值 * @return

*/

int test();

}

接口 If5{

/**

* 单个参数具有

返回值 * @param a

* @return

*/int

test(int a);

}

接口 If6{

/**

* 多个参数有

返回值 * @param a

* @param b

* @return

*/int

test(int a,int b);

}

我们使用 lambda 表达式实现它:无

参数,无返回值

If1 if1=()->{

System.out.println(“No parameters, no return value”);

};

if1.test();

单个参数没有返回值

If2 if2=(int a)->{

System.out.println(“Single parameter no return value a=”+a);

};

if2.test(3);

两个参数都没有返回值

If3 if3=(int a,int b)->{

System.out.println(“两个参数没有返回值 a+b=”+(a+b));

};

if3.test(2,3);

没有参数具有返回值

If4 if4=()->{

System.out.print(“没有参数有返回值”);

返回 100;

};

System.out.println(if4.test());

单个参数具有

返回值If5 if5=(int a)->{

System.out.print(“单个参数具有返回值”);

返回 a;

};

System.out.println(if5.test(200));

多个参数具有返回值

If6 if6=(int a,int b)->{

System.out.print(“多个参数有返回值”);

返回 A+B;

};

System.out.println(if6.test(1,2));

运行输出:无

参数,无返回值

单个参数没有返回值 a

=3两个参数都没有返回值 a+b

=5没有参数的返回值为

100A 单个参数的返回值为

200多个参数的返回值为 3

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/292421.html

(0)
上一篇 2022年11月1日
下一篇 2022年11月1日

相关推荐

发表回复

登录后才能评论