我刚刚发现了一些我以前从未听说过的东西,我不同意(到现在为止)。在(upvoted和未进一步评论)answer我读到“为什么要在同一个包中混合类和接口”
所以我想知道,如果有理由在Java中分离接口和实现。
我知道我们没有义务将所有实现都放在接口的包中,但是(有时)明智的做法是没有吗?
问候
迈克
[; - )
答案 0 :(得分:10)
我同意org.life.java - 我将拥有服务和底层service.impl包,但总是采用这种安排。
我不同意“不良做法”的措辞。那太强了。
java.util Collections API与此建议冲突。我不想成为告诉约书亚布洛赫他做过“糟糕工作”的人。
答案 1 :(得分:8)
将接口和实现保存在单独的包中的原因:
清晰的代码库 - 如果我们有一个带接口的包,另一个带有实现(通常是something.impl
命名空间),它看起来更好,更整洁。代码结构显示/反映您对接口进行编码。
访问修饰符 - 我们可以将包私有访问修饰符用于某些包私有API,以用于相关的接口实现。
库结构 - 也许有一天你决定为API(接口)和实现创建不同的库。那么在不同的包中使用接口和实现是非常好的。因此,您可以在不重构代码库的情况下更改构建。
答案 2 :(得分:7)
对于OSGi,几乎需要使用单独的包AFAIK,以便您可以导出/导入API而无需导出/导入实现。
对于仅在内部的接口,将一切保存在一个包中不是问题。
答案 3 :(得分:3)
这不是坏事,但在不同的包中分离接口和实现肯定是一种好习惯。
例如
com.mycompany.domain.service
com.mycompany.domain.service.impl
<强>优点强>: