应该在哪个包中实现Java接口?

Eva*_*aas 4 java interface package

假设我有一个界面:

package org.my.dicom.CEchoSCU;

public interface CEchoSCU {
    // stuff here...
}
Run Code Online (Sandbox Code Playgroud)

我还将有一个接口的实现:

public class SimpleCEchoSCU implements CEchoSCU {
    // stuff here...
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,哪个包应该包含实现?我已经看到其他开发人员将实现放在与接口相同的包中(org.my.dicom在本例中),以及使用单独包的情况(通常类似org.my.dicom.impl).除了个人喜好之外,还有什么理由更喜欢一个而不是另一个?

Sco*_*ter 6

除了其他之外,类还实现了一个接口.我会把类放在一个与类的其余部分/包含的内容相关的包中,而不是反映它实现的一个接口的包.例如,如果我有200个实现Printable的类,我不会将它们全部放在com.mycompany.impl.printable包中.实现可打印的飞机类将包含其他飞机的包装.船类将与其他船只一起包装.实现Printable的Car类将包含其他汽车内容.

如果所有SimpleCEchoSCU(以及任何其他未来类)都实现了CEchoSCU,那么您应该考虑使CEchoSCU成为一个抽象基类并派生出不同的实现.无论哪种方式,(接口或抽象基类)的东西都是完全相关的,我会将它们放在同一个包中.


Roh*_*ain 5

好吧,关于您将implementation课程和放置在何处并不是一个严格的规则interface。您可以将它们放在任何包中,只要可以在应有的位置访问它们即可。

但是,当然,您也希望将所有内容都related classes合而为一package,而class这就是not relatedset of classes想要的different package

在大多数情况下,我的做法是:-我将自己保持interfacesdifferent packageimplementing classesdifferent package。这样,如果我想将我的接口提供给其他接口,则可以直接放弃包含我所有接口的软件包。

但是同样,这完全取决于您的要求以及您在代码中遵循的设计实践。

因此,我通常选择的包名称是:-

  • com.someName.api ->对于接口
  • com.someName.impl ->用于实现类。

这样,我就可以轻松地将自己apiimplementation