java – 将默认实现添加到代表监听器的接口的方法可以吗?

前端之家收集整理的这篇文章主要介绍了java – 将默认实现添加到代表监听器的接口的方法可以吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的项目中使用了一个库.这个库有一个接口,有大约15种方法.

该接口的目的是使得可以订阅在库中生成的一些事件.应用程序中的监听器类可以实现此接口,并将其自身注册为库中的监听器以接收事件.

该界面中的所有方法实际上都是事件.可以有听众只需要在接口中从许多事件中只接收一个或两个事件.即使一个监听器只对少数事件感兴趣,监听器必须在扩展接口时实现所有的方法.

所以我问这个库的开发人员向接口的方法添加空的默认实现.

但是库开发人员拒绝添加默认实现,指出它将违反java最佳实践,并在接口方法中使用默认的实现来达到接口的目的.

但是,正如我可以理解的,这个接口中的一个方法没有指定这个接口的实现者应该能够执行的一些操作.这个接口中的一个方法是定义一个实现者可能感兴趣的事件,所以我看不到没有添加默认实现的明确原因.

那么,在这个接口中添加默认的实现,打破java的最佳实践?

解决方法

But the library developer refuses to add default implementations,
stating that it would violate java best practices and using default
implementations in interface methods go against the purpose of
interfaces.

此参数在引入默认界面方法之前是有效的.
现在你的同事们必须争辩说,Java 8的错误接口的JLS现在包含不符合接口目的的类.然而,这是一个可行的极端立场,但是没有结果.

您只需通过从库接口导出自己的接口并为所有继承的方法提供默认的空实现来避免讨论.

public interface MyInterface extends LibraryInterface {
    @Override default public void event1() {
    }

    ...
}

或者你们都可以查看以下设计,这对我来说似乎是可疑的,导致您在界面中讨论默认方法

Even though a listener is only interested in few events,listener
has to implement all the methods when extending the interface.

解决方案可能是简单地拆分许多较小的界面.

猜你在找的Java相关文章