在Java中一直困扰我的一件事是:
如何创建一个应该由下游消费者使用的单个公共类,然后很好地组织它依赖于包中的类?
例如(有点人为),我有一个依赖于LdapPersistenceHelper和DBPersistenceHelper的UserDao类. UserDao类位于一个名为com.company.dao的包中,我希望这两个帮助程序位于一个名为com.company.dao.persistencehelper的包中.但是,我不想让这两个助手足够通用,以便其他人可以使用它们.我怎么样?如果我让帮助者“受保护”(真的,没有修饰符),那么我无法从UserDao到达它们.如果我公开,其他人可能会使用它们.
最佳答案
根本问题是你正在尝试使用包来“很好地组织事情”.创建Java包时,有两个设计目标:(1)全局唯一类命名,以及(2)促进使用protected / default访问修饰符.
您被限制为具有与包匹配的源文件夹结构的事实不可避免地导致尝试使用它们来创建“漂亮/有组织的文件夹结构”.但这不是它的创建原因,因此,它不能很好地与它创建的访问修饰符一起支持.
编辑:顺便说一句,我不是以某种方式传递判断力.我意识到我的第一句话可能听起来很关键.许多项目合法地选择有组织和可维护的结构,而不是试图从受保护的访问中挤出一些额外的感知价值.如果帮助程序实用程序是公共的,那真的很糟糕吗?如果你不相信其他开发人员有权不滥用它,他们是否可以信任不仅仅改变访问修饰符?