【发布时间】:2015-09-07 14:20:20
【问题描述】:
我在项目中使用了某个库。这个库有一个接口,它有大约 15 个方法。
此接口的目的是使订阅库中生成的某些事件成为可能。应用程序中的监听器类可以实现该接口,并将自己注册为库中的监听器以接收事件。
这个接口中的所有方法实际上都是事件。可以有只需要从接口中的许多事件中接收一个或两个事件的侦听器。尽管监听器只对少数事件感兴趣,但监听器在扩展接口时必须实现所有方法。
所以我要求这个库的开发者为接口中的方法添加空的默认实现。
但库开发者拒绝添加默认实现,称这将违反 Java 最佳实践,并且在接口方法中使用默认实现违背了接口的目的。
但是,据我所知,此接口中的方法并未指定此接口的实现者应该能够执行的某些操作。这个接口中的方法定义了一个实现者可能感兴趣的事件。所以我看不出不添加默认实现的明确原因。
那么,向这个接口添加默认实现是否会破坏 Java 最佳实践?
【问题讨论】:
-
在 java 8 中,您可以指定接口方法的默认实现,使接口的实现者可以选择实现该方法。
-
这真是一个意见问题;没有客观的答案。但请记住,即使库开发人员不想向接口添加默认实现,您也可以创建自己的接口,扩展库中的接口并添加空的默认实现。你的“真正的”实现类可以实现那个。
-
无论如何,这显然是API设计者的错,他需要提供更好的解决方案。
-
可笑的是,在计算机行业,人们到处乱讲大词,却没人知道它们的意思。我们为什么不停止像一些基本的圣战分子那样说话,而专注于实际问题,例如,有没有更简单的方法来使用你的 API。
-
@biziclop 我完全同意。一个好的问题需要上下文,这个问题确实提供了。