1. 环境
- JDK 8
- Eclipse Oxygen 或其他支持Java8 的Eclipse版本
- Eclipse 自带的 Junit4
2. Lambda表达式
先给出一个定义: 如果一个接口中仅有一个待实现的方法则它在实现的时候可以用Lambda代替.
如,在Java8以前,以创建线程为例.我们需要实现Runnable接口中的run方法将其实例作为参数传给Thread的构造方法,代码如下
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// BlahBlahBlah
System.out.println("BlahBlahBlah");
}
});
写了很多格式化的不必要的代码,这就造成了代码冗长,可读性变得很差.从Java8 开始,凡是形如以上格式的代码统统可以使用lambda 表达式来表达
Thread thread1 = new Thread(() -> {
// BlahBlahBlah
System.out.println("BlahBlahBlah");
});
变得清爽了很多.以前的那些格式化的代码变成了形如 ()->{} 的格式.减少了不必要的代码量.
在以上形式的lambda 表达式中,是没有参数的,如果遇到了需要参数的方法,则只需要在()->{} 的圆括号中写入参数即可,示例代码如下
我们先创建一个接口命名为SomeInterface,可见它只有一个待实现的方法,并且需要x,y两个int 类型的参数
package cn.monoy.demos;
public interface SomeInterface {
public void doSomething(int x, int y);
}
创建一个类,里面有一个方法需要SomeInterface 类型的值作为参数,为了调用方便设为静态的
package cn.monoy.demos;
public class SomeClasses {
public static void someMethod(SomeInterface si) {
// do something
}
}
在主方法调用SomeClasses.someMethod方法时只需要如下代码即可,JVM 会自动推断圆括号中的x,y 是SomeInterface的doSomething方法的参数,他们为int 类型,而不必我们手动声明
public static void main(String[] args) {
SomeClasses.someMethod((x, y) -> {
// do something
});
}
网友评论