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

标签 java namespaces package

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

那么我应该将它们保留原样而不进行安排,还是将它们全部公开以便我可以重新排列它们?我认为后者不是一个好的解决方案,因为很多类并不适合最终用户使用,但我不喜欢将它们直接转储到根包中,因为它只会增加大小。

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

示例:

我有一个名为HexagonalGridBuilder的类。它是公共(public)的并且是 API 的一部分。 Same 代表 HexagonOrientation,它是一个枚举,包含 (FLAT_TOPPOINTY_TOP) 和 HexagonalGridLayout 的值,它是也是一个枚举,并保存六边形网格类型的值,例如RECTANGULARTRIANGULAR。最终用户可以使用这些枚举来参数化 HexagonalGridBuilder 对象,该对象返回一个 HexagonalGrid (一个接口(interface))。

所有实现类都是包私有(private)的,例如 HexagonalGridImplTriangleGridLayoutStrategy。由于我描述的这个打包问题,我无法将这些类移动到不同的包中而不将它们全部public

最佳答案

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

  1. 将代码保留为包私有(private)类,用户不会看到这些,因此只有您会被包中的大量类所困扰。

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

  3. 使用类似 OSGI 的东西,它可以强制执行公共(public) API 与私有(private) API,并且不允许其他人在您的 jar 中直接访问您不希望他们访问的类。但是,只有当您的用户也使用 OSGI 时,才会强制执行此操作。

关于java - 在 Java 中打包这些类的惯用方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18937622/

相关文章:

R 中的 readRDS(文件)

java - 从 InputStream .read 方法获取加载百分比

java - java中正则表达式匹配错误模式

c++ - 本地范围内子命名空间的命名空间别名

在 Laravel Controller 中找不到 PHP 类

java - 如何建立从我的 java 程序到 sqlite3 的连接?尝试时出现包错误

laravel-5 - Laravel 5+ 中模块化编程的最佳实践

java - 使用 0xFF 而不是 0xFFFFFFFF 进行字节初始化

java - 在 Java 中反序列化一个序列化的 php 对象

c++ - 为命名空间中定义的类重载 ostream 运算符 (<<)