Java8新特性:接口的默认方法

2018-07-21  本文已影响0人  悟纤

说明

(1)JDK版本:1.8.0_162

需求缘起:

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的新特性,还是带来了一些编码上的改变,能够让代码更简单。

最近更新:

Java8新特性:接口的默认方法
208\. Spring Boot Swagger2:排序 – 漂游记
207\. Spring Boot Swagger2:极简方式
我读的书很多,但都没有你好看【一禅录】
206\. Spring Boot 2.0 Swagger2:使用
205\. Spring Boot 2.0 Swagger2:初识Swagger
当要离开的时候,我却动情了
205\. jetcache:你需要知道的小技巧
204\. jetcache:在Spring Boot中怎么玩?
遇见阿里,遇见自己
203\. 阿里jetcache
202\. 阿里Pandora Boot
微信公众号赞赏功能升级了,真的假的?
《喜剧之王》「我养你啊」之人生选择
201\. Spring Boot JNDI:Spring Boot中怎么玩JNDI
510阿里日,马老师献上最走心、最科技范儿证婚词~
200\. Spring Boot JNDI:在Tomcat中怎么玩JNDI?
199\. Spring Boot JNDI:这是虾米?
Spring Boot 数据库迁移系列
Spring Boot葵花宝典:初露锋芒:MyBatis insert异常 Parameter 'name' not found
198\. Spring Boot Flyway工作原理

上一篇 下一篇

猜你喜欢

热点阅读