首先定义一个接口
public
interface
Calculation<T> {
public
T colculate(T t1, T t2);
}
|
这个接口只有一个方法也就是计算,下面展示三种使用这个接口的方式。
//匿名内部类
@Test
public
void
test() {
Calculation<Integer> calculation =
new
Calculation<Integer>() {
@Override
public
Integer colculate(Integer num1, Integer num2) {
return
num1 + num2;
}
};
Integer result = calculation.colculate(
1
,
2
);
System.out.println(result);
}
//lambda表达式
@Test
public
void
test2() {
Calculation<Integer> calculation = (num1, num2) -> num1 + num2;
Integer result = calculation.colculate(
1
,
2
);
System.out.println(result);
}
//方法引用
@Test
public
void
test3(){
Calculation<Integer> calculation = Integer::sum;
Integer result = calculation.colculate(
1
,
2
);
System.out.println(result);
}
|
我感觉这个很明显的看出了匿名内部类的啰嗦,所以主要看一下lambda表达式和方法引用。
他们都是把方法传给了一个对象,方法引用看起来更简洁,因为Integer::sum这个方法的具体代码就是接受两个int值,返回一个int值。
和colculate方法的入参和返回值是一样的,所以这里是可以传递这个方法进去的。
下面介绍java8支持的函数引用:
首先就是上述使用的Integer::sum,类名+双冒号+静态方法,还有对象+双冒号+实例方法,还有类名+双冒号+new