【问题标题】:How to organise a library in packages without exposing internal classes如何在不暴露内部类的情况下组织包中的库
【发布时间】:2017-05-22 20:15:33
【问题描述】:

我正在开发一个 Java 库。为了在内部组织事情,我将我的类放在 2 个包中:A 和 B。我只想将包 A 中的一些类公开给库用户。但在内部,我需要从包 A 访问包 B 中的一些类。

如何在不将包 B 中的类暴露给库用户的情况下做到这一点?如果我将它们设为包私有,我将无法从 A 自己访问它们。如果我将它们设为公开,则库用户可以看到它们。

我是否必须将库中的所有代码放在一个大包中,这样我才能访问内部包私有类?

【问题讨论】:

  • 你不能。直到Java 9。也许。任何public 都是全局public
  • 如果您只从包 A 访问它们,为什么包 B 中的类?您的设计在概念上似乎存在缺陷。
  • 我主要访问同一个包中的类,但有时我需要访问另一个包中的类。例如,包含图形类的包有时还需要访问包中包含文件管理的类。
  • @Bartez 但是为什么呢?这听起来像是一个有缺陷的设计。图形包应该访问文件管理包的内部细节。不要交叉关注。您的文件管理包应该公开一个清晰的界面,说明它应该如何使用。如果客户端使用它,则只能通过该接口使用。如果图形由于某种原因需要使用文件管理,它就充当了文件管理的客户端。
  • 我确实发现了这个问题stackoverflow.com/questions/26302066/… 在你的包名中包含“internal”会自动隐藏包吗?或者这只是一个 Eclipse 自动完成约定?

标签: java


【解决方案1】:

通常这是用不同的罐子完成的。一个 jar 将包含您的 A 包,其中包含最终用户需要使用的类。其他 jar 将包含您的 A 类将依赖的类。 这通常使用 Maven 之类的工具来完成。一个很好的例子是使用 Apache 公共库。您可以将它们导入您的班级,但不需要将它们包含在您的 jar 中。您可以简单地让 Maven 在运行时需要它们。

【讨论】:

    猜你喜欢
    • 2019-07-13
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多