如何在库开发中正确使用Java访问修饰符

tee*_*pap 7 java dependencies access-modifiers

我正在开发一个库,其他程序员将导入并将其用于其目的.

我对Java访问修饰符的目标感到困惑.

问题是我有以下课程

  • ClassA 在包中 org.mylibrary
  • ClassB 在包中 org.mylibrary.internal

ClassA需要解析ClassB,因此ClassB需要是公共类.

但是,从库用户视图来看,我不打算在我的库外看到ClassB.因为它不应该而且不需要由用户启动.

我想将ClassB移动到包org.mylibrary并使其成为包私有类.

如果我将它移动到同一个包,那将是一个混乱,很难组织,因为我在这个场景中有很多类,所以在一个大包中会有很多.java文件.

通常我将类放在按类别或图层分组的包中,我认为它很容易组织.

我该怎么做呢?人们如何处理这个问题?

Pét*_*rök 3

很难给出具体的建议,因为您提供的关于 的角色以及之间的关系的信息ClassA太少ClassB。然而,一种通用的解决方案(几乎总是用作消除依赖性的一部分)是隐藏ClassB接口后面。然后ClassA仅使用该接口,因此它不再直接依赖于ClassB. ClassB可以将包设为私有,其实例由工厂生成将依赖项注入ClassA.