ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-11-01 14:47:47  阅读:284  来源: 互联网

标签:javaJDK java 虚拟机 布局 数据 代码 程序 面试 题目


体验λ

表达式让我们用一个小例子来体验 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

标签:javaJDK,java,虚拟机,布局,数据,代码,程序,面试,题目
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有