【发布时间】:2013-12-28 17:02:29
【问题描述】:
我正在尝试封装服务包的所有内部功能。我的大多数类和方法都是包私有的。我有一些我不想在包之外公开的内部接口。我可以将接口本身设为包私有,但所有方法仍然是公共的(接口方法的默认范围)。
我有哪些选择可以从这个包的内部实现中消除公共方法签名?
我正在使用接口,以便我可以使用 spring 轻松切换实现。
需要考虑的一些事项:使用源代码分析的开发工具会将接口方法报告为公共 API 方法。例如,UML 生成器会生成误导性的 UML 图,错误地将其显示为公共方法。
【问题讨论】:
-
你可以把接口换成抽象类。
-
为什么要降低界面成员的可见度?如果接口本身是包私有的,那么它的成员是否是公共的又有什么关系呢?问题是您有实现这些接口的公共类,并且您不希望接口方法实现公开可见吗?
-
@MikeStrobel 一个用例可能是一个公共类,它实现了我不想暴露的方法。其他需要考虑的事情是使用源代码检查和报告“公共”方法的各种开发工具,例如列出公共 API 的工具。
-
@Bart 为此使用抽象类有什么缺点吗?你能回答一下吗?
标签: java interface scope encapsulation