竹笋

首页 » 问答 » 灌水 » 什么接口中方法可以不是抽象的JDK8接
TUhjnbcbe - 2025/1/17 19:40:00

先赞后看,养成习惯文本已收录至GitHub开源仓库Lu_JavaNodes码云仓库地址Lu_JavaNodes,包含教程涉及所有思维导图,案例代码和后续讲解视频,欢迎Star增砖添瓦。

前言

在传统的接口语法中,接口中只可以有抽象方法。在是在实际的使用中,我们往往会需要用到很多和接口相关的功能(方法),这些功能会单独的拿出开放在工具类中。

工具类:类中所有的方法都是静态的

例如:Collection和Collocations,Collection是一个集合接口,而我们需要很多集合相关的操作,像集合的排序,搜索等等,这时候人们会把这些静态方法放在Collections工具类中。

在传统Java中我们经常会看到这样的情况,有一个接口叫A,这时候就会有一个类叫As,As中全是和A接口有关的静态方法。例如:Executor和Executors

这样的一种方式总归来说是有点不方便。于是在JDK8中Java对于接口做了一些改动,允许将静态方法直接写入接口中。(接口中可以定义静态方法,静态方法肯定不是抽象的,是有实现的)。

接口的静态方法

代码案例

根据上述内容,我们来定义一个接口,在接口中写入一个静态方法。

publicclassTestStaticInterface{publicstaticvoidmain(String[]args){//静态方法可以通过类名直接调用接口可以说是特殊的类所以通过接口名可以调用接口中的静态方法HelloInterface.printHello();}}interfaceHelloInterface{inthhh();//定义静态方法staticvoidprintHello(){System.out.println(Hello);}}

运行代码可以看到如下结果

静态方法有什么用呢?

静态方法实际上是很实用的,最基本的用法:我们可以把产生接口对象的方法放在接口中。

什么意思???好,接下来我们通过代码演示一下。

假设现在我们有一个Animal接口,那么这时候如果要获得一个Animal类型的对象,我们要怎么做呢?

传统方法,创建一个Animals工具类,在其中有一个

staticAnimalcreateDog()

可以获取一个Animal类型的对象,代码如下

publicclassTestStaticInterface{publicstaticvoidmain(String[]args){//通过工具类获取对象Animalanimal=Animals.createDog();}}classAnimals{//静态方法获取对象staticAnimalcreateDog(){//局部内部类classDogimplementsAnimal{}//返回对象returnnewDog();}}

但是当你拥抱JDK8的时候,一切都不一样了,因为有接口静态方法,可以直接将接口对象的获取放在接口的静态方法中。代码如下

publicclassTestStaticInterface{publicstaticvoidmain(String[]args){//通过接口的静态方法获取一个Animal类型的对象Animalanimal=Animal.createDog();}}interfaceAnimal{//静态方法获取对象staticAnimalcreateDog(){//局部内部类classDogimplementsAnimal{}//返回对象returnnewDog();}}

在JDK的API中是怎么使用静态方法的

接下来我们通过Java中的API来验证一下这种使用方法。通过API文档,可以找到Comparator接口(比较器),在这个接口中现在就有很多的静态方法(JDK8)。如图

通过这些静态方法,就可以通过接口直接获取比较器对象。

publicclassTestStaticInterface{publicstaticvoidmain(String[]args){//通过Comparator接口获取一个自然排序的比较器(自然排序就是String中默认实现的排序逻辑)ComparatorString

1
查看完整版本: 什么接口中方法可以不是抽象的JDK8接