# java8
# 接口的默认方法
Java 8使我们能够通过使用 default 关键字向接口添加非抽象方法实现。 此功能也称为虚拟扩展方法。
第一个例子:
public interface PersonModelService {
double calculate(int a);
default double sqrt(int a){
return Math.sqrt(a);
}
}
1
2
3
4
5
6
7
2
3
4
5
6
7
PersonModelService 接口中除了抽象方法计算接口公式还定义了默认方法 sqrt。 实现该接口的类只需要实现抽象方法 calculate。 默认方法sqrt 可以直接使用。当然你也可以直接通过接口创建对象,然后实现接口中的默认方法就可以了,我们通过代码演示一下这种方式。
@Test
public void testCal(){
PersonModelService personModelService = new PersonModelService() {
@Override
public double calculate(int a) {
return sqrt(a*1000);
}
};
PersonModelService modelService = (a->a*100);
System.out.println(personModelService.calculate(100));
System.out.println(personModelService.calculate(36));
System.out.println(modelService.calculate(2));
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
译者注
不管是抽象类还是接口,都可以通过匿名内部类的方式访问。不能通过抽象类或者接口直接创建对象。对于上面通过匿名内部类方式访问接口,我们可以这样理解:一个内部类实现了接口里的抽象方法并且返回一个内部类对象,之后我们让接口的引用来指向这个对象。
# 链式调用
# 高阶函数
高阶函数是指接受另外一个函数作为参数,或返回一个函数的函数 高阶函数不难辨认:看函数签名就够了。如果函数的参数列表里包含函数接口,或该函数返回一个函数接口,那么该函数就是高阶函数。
我们可以使用内置的Supplier 函数接口,它只有一个get 方法
值得注意的是,不同的函数接口有不同的方法。
如果使用Predicate,就应该调用test方法,
如果使用Function,就应该调用apply 方法。