【问题标题】:What is the purpose of java packages having unique names?具有唯一名称的 java 包的目的是什么?
【发布时间】:2017-12-28 20:48:15
【问题描述】:

每当我看 Java 教程时,他们的包名总是以 com 或 org 开头,这与开发人员的域有关。但是,我不明白这样做的总体目的,因为我不明白拥有唯一的包名称如何影响任何事情。为什么不随便命名它而不担心其他人是否将他们的包裹命名为与您的相同?为什么重要?

【问题讨论】:

  • 是的,我一分钟前才知道,但感谢您的回复
  • 很高兴你自己理解了。
  • 查看Central,了解您在创建 Java 项目时可能使用的各种包。

标签: java packages


【解决方案1】:

具有唯一名称的 java 包的目的是什么?

目的是避免不同代码库之间意外命名冲突,以及由此引起的问题;见下文。

为什么不随便给 [一个包] 命名,而不用担心其他人是否将他们的包命名为与您的相同?为什么重要?

这就是很多人所做的。他们忽略了这个问题。

但是,假设您(或其他人)需要将两个代码库与选择不当或不幸选择的包名称相结合,从而导致包名称冲突。

  • 新类将出现在原始作者未预料到的包中。
  • 会出现新的隐式导入,可能会导致编译错误或含义的意外更改。 (例如,假设一个代码库定义了自己的 Class 类。)
  • 完全限定的类名可能会发生冲突。在这种情况下,一个类会“隐藏”另一个类。
  • 使用基于包名称的反射来查找组件的代码可能会中断。
  • 类加载器资源位置可能会因意外资源出现或隐藏而中断。
  • 至少,精心设计的包和子包的组织会被打乱。例如,类会出现在 javadoc 中的包中,这些包的意义不如以往。

为了解决这个问题,您/他们必须重新设计代码以避免包名冲突的最坏影响。诚然,现代 IDE 的重构支持可以完成大部分的工作……如果您以正确的顺序进行操作。但不是全部;例如javadocs 中的反射、资源和引用。

然后您会遇到维护一个代码库的问题,该代码库与至少一个组件的原始版本完全不同。 git changeset merging 之类的工具很可能 将不再适用……假设您通过更改包名称解决了问题。您必须手动应用“上游”的任何更改,或者根本不跟踪它们。

在我看来,最后一个可能是碰撞的最令人不安的后果。


由于有一种简单的方法可以提前避免/最小化风险,因此这样做是有意义的。

(就像在汽车上系安全带一样......)

【讨论】:

    【解决方案2】:

    因为如果它们都具有相同的名称,则只有一个包,而不是“包”。

    【讨论】:

      猜你喜欢
      • 2019-09-10
      • 2023-03-16
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多