我试图封装服务包的所有内部功能。我的大部分类和方法都是包私有(private)的。我有一些我不想在包外公开的内部接口(interface)。我可以使接口(interface)本身成为包私有(private)的,但是所有方法仍然是公共(public)的(接口(interface)方法的默认范围)。
我有哪些选择可以从该包的内部实现中消除公共(public)方法签名?
我正在使用接口(interface),以便我可以使用 spring 轻松切换实现。
需要考虑的一些事情:使用源代码分析的开发工具会将接口(interface)方法报告为公共(public) API 方法。例如,UML 生成器会生成误导性的 UML 图,错误地将此显示为公共(public)方法。
最佳答案
正如@Bart 已经指出的那样,一种可能的解决方案是使用抽象类而不是接口(interface)。与此概念相关的一个可能问题是单一继承问题。
另一种解决方案可能是将“私有(private)”接口(interface)分离到不同的包中,不需要与您的服务包一起发布,认为这种方法会完全破坏接口(interface)的语义,特别是如果一个逻辑接口(interface)有“私有(private)”和“公共(public)”部分。
想到的最后一个解决方法是使用一些模式,例如Double dispatch或 Visitor可能会有用。
关于java - 什么相当于封装包内部功能的包私有(private)接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20507008/