"在同一个包中混合类和接口"是不好的做法吗?

Der*_*ike 8 java code-organization

我刚刚发现了一些我从未听说过的东西,我不同意(现在).在一个(upvoted和未进一步评论)的答案中,我读到"为什么要在同一个包中混合类和接口"

所以我想知道,如果有理由在Java中分离接口和实现.

我知道我们没有义务将所有实现都放在接口的包中,但是(有时)明智的是没有它吗?


迈克
[;-)

duf*_*ymo 10

我同意org.life.java - 我将有服务和底层service.impl包,但总是在那种安排.

我不同意"不良做法"的措辞.那太强了.

java.util Collections API与此建议冲突.我不想成为告诉约书亚布洛赫他做过"糟糕工作"的人.


And*_*s_D 8

在单独的包中保持接口和实现的原因:

清晰的代码库 - 如果我们有一个带接口的包,另一个带有实现(通常是something.impl命名空间),它看起来更好,更整洁.代码结构显示/反映您对接口进行编码.

访问修饰符 - 我们可以将包私有访问修饰符用于某些包私有API以用于相关的接口实现.

库结构 - 也许有一天你决定为API(接口)和实现创建不同的库.那么在不同的包中使用接口和实现是非常好的.因此,您可以在不重构代码库的情况下更改构建.

  • 我发现只有第三点相关。我不明白你的第二点。如果您的实现在单独的包中,包私有接口有什么用? (2认同)

Tho*_*ler 7

对于OSGi,几乎需要使用单独的包AFAIK,因此您可以导出/导入API而无需导出/导入实现.

对于仅在内部的接口,将一切保存在一个包中不是问题.