我正在写一个有25个班级的图书馆。其中4-5个是公共api。其他类目前是私有包。我的问题是我想将它们安排到自己的软件包中,但这对于当前的设置是不可能的,因为这样那些类将无法看到彼此。
所以我应该在没有安排的情况下将它们保留原样,或者将它们全部放在public
以便我可以重新排列它们?我认为后者不是一个好的解决方案,因为最终用户并不打算使用很多类,但是我不喜欢将它们转移到根包中,因为它只会增加大小。
java中是否存在解决此问题的惯用方法?
示例:
我有一个名为HexagonalGridBuilder
的班级。它是公共的,也是api的一部分。同样代表HexagonOrientation
这是一个枚举,并保存(FLAT_TOP
和POINTY_TOP
)和HexagonalGridLayout
的值,它也是一个枚举,并保存了类型的值像RECTANGULAR
和TRIANGULAR
这样的六边形网格。最终用户可以使用这些枚举来参数化HexagonalGridBuilder
对象,该对象重新构造作为接口的HexagonalGrid
。
所有实现类都是包私有,如HexagonalGridImpl
或TriangularGridLayoutStrategy
。由于我所描述的这个包装问题,我无法将这些类移动到不同的包而不是全部public
。
答案 0 :(得分:1)
除了等待Java Project拼图之外,您的解决方案还有几种解决方法:
保持代码与包私有类一样,用户不会看到这些,所以只有你会被包中的很多类打扰。
您可以使用my.package.internal之类的名称创建包,但将这些类设为public,以便其他人可以使用,但希望“internal”这个名称告诉他们不要这样做。
使用像OSGI这样的东西,可以强制执行公共API和私有API,不要让其他人在你的jar中直接访问你不希望他们使用的类。但是,只有在您的用户也在使用OSGI时才会执行此操作。