有什么选项可以用Java定义到Java库的公共接口。用Java定义公共库接口
例如,我经常发现事情是公开的,因为库中的另一个包需要它们(虽然仍有一个公共基础包,例如com.stackoverflow.mylib),所以它们不能具有包访问级别,并且通常人们并不想要大量的包(这似乎是人们使用Spring坚持要有单独的controller/service/model/impl/etc包,导致一个单独的“特性”被迫跨越很多包,当说一个给定的服务可能是一个完全内部的实现细节而不是外部使用......)。
因此,理想的目标是让我向第三方提供的Jar清楚地说明这些东西是不会被使用的,理想情况下根本没有它们可用(不存在于API jar中),这样他们不可能使用和编译这些内部对象/方法。
对于那些只能从某种工厂(例如提供的Spring Bean)中获得的对象来说,更为理想的方法是防止直接从它们的代码或自定义bean实例化(这可能会留下一些未来的,尚不存在的属性升级后未初始化)。
我知道目前两家正规方法是:
- 在一些项目中我曾上,有一个API包(如com.stackoverflow.mylib.api),而规则是只这个包的内容可以由外部用户直接访问。
- 在我工作过的其他一些项目中,有一些自定义属性,例如@PublicSDK标记公共对象和方法(我认为一些额外的东西,以确保只标记的东西在公开分发的javadoc和api jar)。
发表评论或做/建议编辑不只是近距离投票......我想知道什么技术选项(即列出任何相关的专业人士的意见)为给定的情况(图书馆代码)。 – 2014-10-01 23:06:27