前言:在jdk1.8的新特性中,新增了lamda表达式,以避免匿名内部类使用过多。
理解Lambda表达式,首先要了解函数式接口(Functional Interface)
。这是学习Lamda表达式的关键。
那么什么是函数式接口呢?
函数式接口的定义就是:
对于任何接口,如果这个接口中只含有唯一的一个抽象方法
,那么,这个接口就是函数式接口。
比如说Runnable接口,我们来看Runnable接口的实现代码。
@FunctionalInterface
public interface Runnable {
/**
* When an object implementing interface <code>Runnable</code> is used
* to create a thread, starting the thread causes the object's
* <code>run</code> method to be called in that separately executing
* thread.
* <p>
* The general contract of the method <code>run</code> is that it may
* take any action whatsoever.
*
* @see java.lang.Thread#run()
*/
public abstract void run();
}
在Runnable接口中,只存在一个抽象方法run()。
而我们可以通过Lambda表达式就能够创建该接口的对象。
下面我们推导一下lamda表达式(可看B站狂神说):
package com.cui.java8;
/*
* @autor czy
* 推导lambda表达式
* */
public class Lamda{
//3.静态内部类
static class Like2 implements ILike{
@Override
public void Lambda() {
System.out.println("I like lambda2!");
}
}
public static void main(String[] args) {
ILike iLike = new Like();
iLike.Lambda();
iLike=new Like2();
iLike.Lambda();
//4.局部内部类
class Like3 implements ILike{
@Override
public void Lambda() {
System.out.println("I like lambda3!");
}
}
iLike = new Like3();
iLike.Lambda();
//5.匿名内部类
iLike = new ILike() {
@Override
public void Lambda() {
System.out.println("I like lambda4!");
}
};
iLike.Lambda();
//6.Lambda简化匿名内部类
iLike = ()->{
System.out.println("I like lambda5!");
};
iLike.Lambda();
}
}
//1.定义一个函数式接口
interface ILike{
void Lambda();
}
//2.实现类
class Like implements ILike{
@Override
public void Lambda() {
System.out.println("I like Lambda!");
}
}
以上便是Lambda的推导过程
如果看上面代码觉得乱,可看下面代码:
package com.cui.java8;
public class Lambda2 {
public static void main(String[] args) {
LoveU loveU = (a)->{
System.out.println("you are "+a);
};
loveU.loveu(250);
}
}
interface LoveU{
void loveu(int a);
}