7

在 Java 中避免包名冲突的标准方法是使用反向域约定com.[mycompany].[rest-of-the-package-name]。这非常有效......如果一个人拥有域 [mycompany].com。

但是,有几个个人开发人员(或学生):

  • 不要(或负担不起)拥有域名
  • 仍然会想出一些包名称,希望它们是独一无二的。

仅此一项就引入了包冲突的范围。

此外,假设我拥有 [mycompany].com。是什么阻止了开发人员创建与我的包前缀相同的库并分发它?AFAIK,关于包名称没有法律约束力(“你必须拥有你在 Java 包中使用的域”)。更不用说开发人员的这一行为可能不是故意的(我们中有多少人在为我们的包命名之前会在网上搜索一个不存在的域名?)。

更进一步,即使我拥有一个域名,它可能适合也可能不适合用作包名称(我的域名可能包含连字符,或者它可能太长以至于虽然它是一个合法的包名称,但它仍然可以使其不切实际)。

所以我的问题是:我如何真正使我的 Java 包名称独一无二?

4

2 回答 2

15

你不能绝对保证你的包名是全局唯一的。正如您所提到的,没有什么可以阻止其他人使用相同的包名称,无论谁拥有包名称所基于的任何内容。没有使用中的包名称的权威索引。

于 2012-05-22T13:53:56.360 回答
7

我看到您的问题的两个答案:

  • 将您的学生项目设为SourceForge项目并命名包net.sf.myproject(或使用任何类似的免费主机,例如GitHub)。这样的包名称可能不会被其他人使用,尽管不能保证正如Matt Hurne指出的那样
  • 除此之外,如果你不能或不想买一个域名,你的程序不太可能被广泛的受众使用,你可以随意命名你的包
于 2012-05-22T13:54:33.803 回答