# java8

返回java8及其以上

# 接口的默认方法

back

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

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

译者注

不管是抽象类还是接口,都可以通过匿名内部类的方式访问。不能通过抽象类或者接口直接创建对象。对于上面通过匿名内部类方式访问接口,我们可以这样理解:一个内部类实现了接口里的抽象方法并且返回一个内部类对象,之后我们让接口的引用来指向这个对象。

# 链式调用

back

# 高阶函数

back

高阶函数是指接受另外一个函数作为参数,或返回一个函数的函数 高阶函数不难辨认:看函数签名就够了。如果函数的参数列表里包含函数接口,或该函数返回一个函数接口,那么该函数就是高阶函数。

我们可以使用内置的Supplier 函数接口,它只有一个get 方法 值得注意的是,不同的函数接口有不同的方法。
如果使用Predicate,就应该调用test方法,
如果使用Function,就应该调用apply 方法。