如何将Java库源代码分成两个块,保留一个包?

如何将Java库源代码分成两个块,保留一个包?,java,android,Java,Android,我们正在创建一个用于android的android库。这意味着类似Eclipse的IDE和类似Ant的构建过程 库的本质是它有两个不同的部分,代表不同的抽象层次——比如“上”和“下” 出于这个问题的目的,假设我们需要从一个部分调用另一个部分中的方法,但希望对库用户隐藏这些方法。我已经浏览了常用的参考文献,但它们都停留在解释包名约定和范围规则的时候。我没能找到任何答案,所以,虽然是有用的 直接的解决方案是将所有内容都放在一个包中,并且这些方法都是包私有的。但是,出于可维护性、清晰性和不在一个文件夹

我们正在创建一个用于android的android库。这意味着类似Eclipse的IDE和类似Ant的构建过程

库的本质是它有两个不同的部分,代表不同的抽象层次——比如“上”和“下”

出于这个问题的目的,假设我们需要从一个部分调用另一个部分中的方法,但希望对库用户隐藏这些方法。我已经浏览了常用的参考文献,但它们都停留在解释包名约定和范围规则的时候。我没能找到任何答案,所以,虽然是有用的

直接的解决方案是将所有内容都放在一个包中,并且这些方法都是包私有的。但是,出于可维护性、清晰性和不在一个文件夹中包含100个文件的原因,我们更愿意将这些部分拆分为不同的文件夹

显而易见的拆分点是将“wibble”包拆分为com.me.wibble.upper和com.me.wibble.lower包/文件夹,但这会使任何互连方法不必要地公开。作为缓解措施,可以使用@hide对javadoc隐藏它们

另一个想法是,我们是否可以在顶层拆分部分,而不是在经典的/main和/test文件夹中使用/upper、/lower和/test,并且所有部分共享相同的com.me.wibble命名空间。我不确定Eclipse是否/如何应对这种情况


有没有一种传统的方法来做这件事,或者只是没有?如果有办法,赞成和反对的是什么

hmmm……与其问问题的答案,有时还是提出问题为好。为什么您希望库用户具有受限视图可能比HOWTO生成更好的答案。我想了一些答案,但没有给出,因为我不知道这个问题背后的动机,我不想浪费你的时间在一个不适用的答案上

/上、/lower/,/test并不能使您的情况变得更好。它只是让项目更有组织性。无论它们是在同一个文件夹中还是分开,都不会产生太大影响


听起来你需要公共的“接口”供图书馆用户使用,而私人的“接口”供你自己使用。这在黑客攻击中是可能的,但如果这是大量预先存在的代码集合,则可能会很痛苦。

您考虑过使用吗?有了它,您可以将所有方法保持私有,但将代码保存在单独的包中。Akk!反思没有什么隐私可言@塔尼斯:我没有考虑过反思。我的背景是C,不会有这个原始问题;-所以我在寻找一个“正常”的解决方案,但是谢谢你的建议;还有一个警告,迂腐。我之所以要限制用户的观点,其基本动机是因为有效的Java——区分设计良好的模块的一个最重要的因素是它隐藏其内部实现的程度。。然而,这并不是一个正确的问题:正确的问题是,为什么我要将两个单元分开,它们可以被编码为一个模块?其动机是帮助我们保持逻辑分离的干净:将代码作为一个模块进行编码可能会导致单元之间的混乱交互。你可以把这段代码看作是一个新的创造:它是一次重大的重构/重写。@Cheeseminer Joshua Bloch有一本书、一篇论文和一些关于设计库的演示文稿?API。如果这是一项非常关键的任务,你可以考虑查阅文献。我的建议是,默认情况下,将所有内容(甚至许多类)都设置为私有包。上/下/测试文件夹可以共享名称空间。从长远来看,减少软件包依赖性可以促进您的设计,但在短期内可能会非常痛苦。为了向外界公开类,有工厂模式和接口。