欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

从kafka源码阅读中看出了问题之abstract interface

程序员文章站 2024-02-17 19:25:10
...

今天在看到kafka的源码类org.apache.kafka.common.network.SslTransportLayer时,看到这个类引用了

javax.net.ssl.SSLSession这个类,点进去看了一下这个类,着实让我吃惊了一把。

public abstract interface javax.net.ssl.SSLSession

见惯了abstract class,还真没见过abstract interface。什么时候,abstract都开始跨界修饰起了interface了。

本着好奇的心,我写了这样一个接口,同样的用abstract修饰了一番。只是接口里面什么都没有。

public abstract interface AbstractInterface {

}

然后在JDK1.8.0_151的环境下,编译然后反编译,看了看结果。

从kafka源码阅读中看出了问题之abstract interface

原来对于一个空接口而言,加了abstract和没加没什么区别。

如果接口里面有方法呢?既然abstract修饰,那就来一个abstract方法吧。

public abstract interface AbstractInterface {
    abstract void func();
}

编译反编译一下,看看结果:

从kafka源码阅读中看出了问题之abstract interface

可以看到,javac编译器还是去掉了interface前面的abstract。但是方法前面的abstract还是保留下来了。

那么如果,func()方法前面不加abstract修饰呢?

public abstract interface AbstractInterface {
    void func();
}

编译反编译,看看结果:

从kafka源码阅读中看出了问题之abstract interface

 javac还是在方法前面还是给加上了abstract。也同样去掉了interface前面的abstract。

最后一个问题,如果没有abstract修饰interface,可以加abstract修饰方法吗?

像这样:

public interface AbstractInterface {
    abstract void func();
}

 编译反编译一下,看看结果:

从kafka源码阅读中看出了问题之abstract interface

结果还是一样,javac会自动给方法加上abstract,即使没有abstract修饰interface。

【总结】:

(1)可以给interface加上abstract,但是没什么用,javac会自动去掉interface前面的abstract。

(2)接口里的方法,不加任何修饰符,javac会默认给加上public abstract修饰符。