空接口

139 阅读1分钟

空接口,没有任何抽象方法。 按常识理解,仅仅是标识。类似一个注解。 作用:达成共识、统一标准。可以实现 比如

if (xx interface of xxxInf){
    doSomething();
}

案例 来源JDK 1.8

最经常遇到的一个:序列化

public interface Serializable {
}

JVM会识别是否实现了该接口,做序列化相关的。也就是JVM底层是根据这个【标识】底层会做相应的处理。

那如果底层不支持额外的处理呢? 比如

    /**
     * A marker interface identifying asynchronous tasks produced by
     * {@code async} methods. This may be useful for monitoring,
     * debugging, and tracking asynchronous activities.
     *
     * @since 1.8
     */
    public static interface AsynchronousCompletionTask {
    }

再比如 spring 里面的

public interface Aware {
}

契约作用:   举个例子, 如果直接依赖实现类的话, 一个开发人员有一天修改了这个实现类的方法签名, 那么给他带来的是, 编译的时候所有引用这个方法的报错. 但是如果是有接口的话, 应该是只有报没有实现该接口的错误. 在这个地方, 接口就是作为一种契约, 是这种契约是给编译器的, 同时也是给开发人员的 -- 告诉开发人员说这里就是应该这么写的, 换句话说, 写接口的人和实现的人是可以分开的, 有了接口的话, 可以快速定位到打破契约的行为.

原文:blog.csdn.net/sparrowxin/…

也就是用户扩展时,需要遵循这个特性,达成共识。