需求缘起:
Spring Boot 2.0有很多新的特性,但是这些特性是依赖JDK的版本是jdk 8+才能进行使用的,所以要学习Spring Boot2.0的新特性,要扫一下Java8的新特性,学习起来会比较轻松。在接下来的文章会会Java8的新特性进行的介绍下,然后再介绍Spring Boot2.0的新特性,另外Java8也有一些挺不错的特性,如果你的项目中已经升级到JDK1.8了,但是你还是使用旧的编码方式,那么就有点像是拿着一把宰牛刀去杀鸡了。
通过接下来的文章,那么你可以了解到:
(1)Java8的新特性,比如:接口默认方法、Lambda表达式、Stream API等。
(2)SpringBoot 2.0的新特性。
本篇文章主要介绍下:接口的默认方法。
一、接口的默认方法
JDk8在接口中新增了default方法和static方法,这两种方法可以有方法体。
1.1 default方法
jdk8以前的做法肯定是现在接口中定义这个抽象方法,然后所有实现类必须实现这个方法(不然接口中多出一个抽象方法,其他类都没有实现,编译是会报错的),如果实现类比较多,那改起来会很麻烦,这种情况下是不利于维护的。
那么我们在jdk8中就有了好的解决方式,就是在接口中加一个默认方法,这个默认方法有具体实现,这样就不用去修改实现类啦,很省事。
这里我们有一个计算器的代码:
接口类Calculator(代码支持左右滑动):
public interface Calculator {
double add(double first, double second);
double sub(double first, double second);
double div(double first, double second);
double mul(double first, double second);
}
实现类CalculatorImpl:
public class CalculatorImpl implements Calculator {
public double add(double first,double second) {
return first+second;
}
public double sub(double first,double second) {
return first-second;
}
public double div(double first,double second) {
return first/second;
}
public double mul(double first,double second) {
return first*second;
}
}
这时候我们来了一个新的需求,我们希望支持三个数的相加,那么以前的做法就是在接口重新定义一个方法,然后再实现类进行实战,如果我们的接口被很多类实现了,那么就要修改特别多的地方,但是这个方法的实现大家都是一样的。JDK8就很好的解决了这个问题,只需要在接口中接入一个default method:
default double addThree(double first, double second, double Third){
return first + second + Third;
}
double add(double first, double second);
double sub(double first, double second);
double div(double first, double second);
double mul(double first, double second);
}
接口的实现都不需要改变,如果有实现类的具体实现方式不一样,那么可以方法的重写进行实现。
Default方法有如下特点:
(1)default方法可以被子接口继承亦可被其实现类所调用。
(2)default方法被继承时,可以被子接口覆写
1.2 static方法
接口里的静态方法,即static修饰的有方法体的方法不会被继承或者实现,但是静态变量会被继承。看下面最简答的使用方式:
public interface Calculator {
default double addThree(double first, double second, double Third){
return first + second + Third;
}
static int randNumber(int min,int max) {
return new Random().nextInt(max-min+1)+min;
}
double add(double first, double second);
double sub(double first, double second);
double div(double first, double second);
double mul(double first, double second);
}
在这里我们为Calculator增加了一个静态的方法randNumber,产生随机数[min,max],这样就可以使用Calculator.randNumber(3,10)进行调用,那么就可以随机获取[3,10]的随机数。
这个static方法还特别有意思,还记得我们以前的静态静态工厂类嘛:
public class CalculatorFactory {
private CalculatorFactory() {};
public static Calculator getInstance() {
return new CalculatorImpl();
}
}
调用方式:
double rs1 = CalculatorFactory.getInstance().add(2, 3);
System.out.println("rs1="+rs1);
现在有了接口中的静态方法怎么解决呢?就是在接口中加一个静态方法就可以实现了:
public interface Calculator {
default double addThree(double first, double second, double Third){
return first + second + Third;
}
static int randNumber(int min,int max) {
return new Random().nextInt(max-min+1)+min;
}
static Calculator getInstance() {
return new CalculatorImpl();
}
double add(double first, double second);
double sub(double first, double second);
double div(double first, double second);
double mul(double first, double second);
}
调用方式:
double rs2 = Calculator.getInstance().add(2, 3);
System.out.println("rs2="+rs2);
好了,本人就介绍到这里。确实,java8的新特性,还是带来了一些编码上的改变,能够让代码更简单。