java - 什么相当于封装包内部功能的包私有(private)接口(interface)?

标签 java interface scope encapsulation

我试图封装服务包的所有内部功能。我的大部分类和方法都是包私有(private)的。我有一些我不想在包外公开的内部接口(interface)。我可以使接口(interface)本身成为包私有(private)的,但是所有方法仍然是公共(public)的(接口(interface)方法的默认范围)。

我有哪些选择可以从该包的内部实现中消除公共(public)方法签名?

我正在使用接口(interface),以便我可以使用 spring 轻松切换实现。

需要考虑的一些事情:使用源代码分析的开发工具会将接口(interface)方法报告为公共(public) API 方法。例如,UML 生成器会生成误导性的 UML 图,错误地将此显示为公共(public)方法。

最佳答案

正如@Bart 已经指出的那样,一种可能的解决方案是使用抽象类而不是接口(interface)。与此概念相关的一个可能问题是单一继承问题。

另一种解决方案可能是将“私有(private)”接口(interface)分离到不同的包中,不需要与您的服务包一起发布,认为这种方法会完全破坏接口(interface)的语义,特别是如果一个逻辑接口(interface)有“私有(private)”和“公共(public)”部分。

想到的最后一个解决方法是使用一些模式,例如Double dispatchVisitor可能会有用。

关于java - 什么相当于封装包内部功能的包私有(private)接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20507008/

相关文章:

java - 如何在 Android 应用程序中运行终端命令?

xml - 将 XML 节点绑定(bind)到 TreeView 节点

Java接口(interface)问题

Javascript 构造函数 : Accessing outside variable

javascript - 在原型(prototype)方法中修改内部函数的实例变量

java - 如何在 XML 中设置 Spring Scope

java - 如何从 for 循环关系中创建循环关系

java - JPanel 内的 JTable 位于 JScrollPane 内,带有 GridBagLayout,看起来不正常

java - 如何从数据类调用 Kotlin copy() 到 java 类?

interface - 强制转换为接口(interface)和契约(Contract)实例之间有区别吗?