Lambda表达式

package com.yy;

/**

  • 匿名内部类缺点:代码阅读性差
  • 可以使用JDK8提供的新特性解决这些问题
  • JDK8新特性
  • 1.接口中可以使用default关键字书写普通方法
  • 2.接口中也可以写静态方法
  • 3.Lambda表达式解决匿名内部类代码阅读性差的问题
  • 4.方法引用
  • 5.stream函数式编程
  • Lambda表达式属于函数式编程的体现 有些计算机语言就是函数式的语言 比如Haskell
  • @author WHD

*/

//Lambda表达式和前端的箭头函数使用方法一样

public class Test2 {
public static void main(String[] args) {

	//创建A接口类型的匿名类对象
	A a = new A() {

		//重写
		@Override
		public void print() {
			System.out.println("匿名内部类实现方式");
		}
		
	};
	
	//调用匿名内部类方法
	a.print();
	// 使用Lambda表达式的方式实现同样的效果
	// 使用lambda表达式书写更为简洁 但是不能具体制定重写的是哪个方法
	// 所以要求接口或者抽象类中只能有一个抽象方法
	// () - > 这个是固定书写格式 
	
	//A接口类型   a1是接受对象名,(形参列表),->后面函数体
	//当接口只有一个方法时,自动重写A接口里的方法
	//Lambda表达式重写A接口里的print方法,并被A接口类型的对象a1接受
	A a1 = ()-> System.out.println("lambda表达式方式实现");
	
	//a1是Lambda表达式函数的对象,调用Lambda表达式重写的方法
	a1.print();
	
	
	//形参sb,函数体是输出传入的参数
	//当接口只有一个方法时,自动默认是重写B接口里的方法
	B b = (sb)-> System.out.println(sb); 
	
	//调用重写的B接口方法,并传参"hello world"
	b.print("hello world");
	
	//当接口只有一个方法时,自动默认重写此方法
	//重写C接口里的print方法,形参列表是numa,numb,不声明形参类型时,默认和原方法形参类型一致
	//函数体只有一句语句时,默认是返回值,返回numa + numb
	C c = (numa,numb)->  numa + numb;
	
	//输出重写的print方法并传参
	System.out.println(c.print("a", 20));
	
	//当接口只有一个方法时,自动默认重写此方法
	//重写D接口里的print方法,形参列表是number1,number2,不声明形参类型时,默认和原方法形参类型一致
	//函数体只有一句语句时,默认是返回值,语句大于一句时,要return声明返回值语句
	D d = (number1,number2)-> {
		String str = "hello";
		return str;
	};
	
	// E e = () -> "hello world"; 抽象类不能使用lambda表达式
}

}

interface D{
String print(int a , int b);
}

@FunctionalInterface
interface A{
void print();
}

@FunctionalInterface
interface B{
void print(String a);
}

interface C{
String print(String a,int b);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值