在Java中打包这些类的惯用方法是什么?

时间:2013-09-21 21:05:40

标签: java namespaces package

我正在写一个有25个班级的图书馆。其中4-5个是公共api。其他类目前是私有包。我的问题是我想将它们安排到自己的软件包中,但这对于当前的设置是不可能的,因为这样那些类将无法看到彼此。

所以我应该在没有安排的情况下将它们保留原样,或者将它们全部放在public以便我可以重新排列它们?我认为后者不是一个好的解决方案,因为最终用户并不打算使用很多类,但是我不喜欢将它们转移到根包中,因为它只会增加大小。

java中是否存在解决此问题的惯用方法?

示例:

我有一个名为HexagonalGridBuilder的班级。它是公共的,也是api的一部分。同样代表HexagonOrientation这是一个枚举,并保存(FLAT_TOPPOINTY_TOP)和HexagonalGridLayout的值,它也是一个枚举,并保存了类型的值像RECTANGULARTRIANGULAR这样的六边形网格。最终用户可以使用这些枚举来参数化HexagonalGridBuilder对象,该对象重新构造作为接口的HexagonalGrid

所有实现类都是包私有,如HexagonalGridImplTriangularGridLayoutStrategy。由于我所描述的这个包装问题,我无法将这些类移动到不同的包而不是全部public

1 个答案:

答案 0 :(得分:1)

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

  1. 保持代码与包私有类一样,用户不会看到这些,所以只有你会被包中的很多类打扰。

  2. 您可以使用my.package.internal之类的名称创建包,但将这些类设为public,以便其他人可以使用,但希望“internal”这个名称告诉他们不要这样做。

  3. 使用像OSGI这样的东西,可以强制执行公共API和私有API,不要让其他人在你的jar中直接访问你不希望他们使用的类。但是,只有在您的用户也在使用OSGI时才会执行此操作。