0

我正在编写一个包含 25 个类的库。其中 4-5 个是公共 api。其他类目前是包私有的。我的问题是我想将它们安排到他们自己的包中,但在当前设置下这是不可能的,因为这样这些类将无法看到彼此。

那么我应该让它们保持原样而不进行安排还是全部制作public好以便我可以重新安排它们?我认为后者不是一个好的解决方案,因为很多类并不打算由最终用户使用,但我不喜欢它们只是转储到根包中,因为它只会增加大小。

java中有没有一种惯用的方法来解决这个问题?

例子:

我有一个名为HexagonalGridBuilder. 它是公开的并且是 api 的一部分。同样代表HexagonOrientationwhich 是一个枚举并保存 (FLAT_TOPPOINTY_TOP)的值,HexagonalGridLayout它也是一个枚举并保存六边形网格类型的值,如RECTANGULARTRIANGULAR。最终用户可以使用这些枚举来参数化返回一个接口的HexagonalGridBuilder对象。HexagonalGrid

所有的实现类都是包私有的,比如HexagonalGridImplor TriangularGridLayoutStrategypublic由于我描述的这个包装问题,我无法将这些类移动到不同的包中而不将它们全部制作。

4

1 回答 1

1

除了等待 Java Project jigsaw 之外,您的解决方案还有几种解决方法:

  1. 将代码与包私有类保持原样,用户不会看到这些,因此只有您会被包中的许多类所困扰。

  2. 您可以使用 my.package.internal 之类的名称制作包,但将类公开,以便其他人可以使用它们,但希望名称“internal”告诉他们不要这样做。

  3. 使用诸如 OSGI 之类的东西,它可以强制执行公共与私有 API,并且不会让您的 jar 旁边的其他人直接访问您不希望他们访问的类。但是,只有在您的用户也使用 OSGI 时才会强制执行此操作。

于 2013-09-21T21:10:23.827 回答