java包结构的反向域名有什么意义?

时间:2010-03-19 05:33:58

标签: java packages

为什么我们使用像com.something这样的反向域名。或者org.something。 java包的结构? 我知道这会带来某种独特性,但为什么我们需要这种独特性呢?

6 个答案:

答案 0 :(得分:31)

关于我们为什么要这样做:想象一下,你有两个重要的包,一个会计包和一个图形包。如果您按“直接”顺序指定了这些:

accounting.mycompany.org
graphics.mycompany.org

然后它意味着有一个主要的accounting包,其子部分用于mycompany的子部分包称为org你实际使用的包裹。但是,你想要这个:

org.mycompany.accounting
org.mycompany.graphics

这更有意义。在组织(org)的所有包中,您特别关注mycompany,它有两个子包,accountinggraphics个子包。

答案 1 :(得分:30)

全球唯一的包名称可避免命名来自不同来源的库之间的冲突。使用域名注册表而不是创建全局名称的新中央数据库。来自JLS:

  

建议的惯例   生成唯一的包名称是   只是一种背包的方式   在...之上命名约定   现有的,广为人知的独特名称   注册表而不是必须创建一个   包名称的单独注册表。

答案 2 :(得分:4)

正如您所说,反向域名作为基础包名称可确保唯一性。假设DN example.com和example.org的两家公司都在其框架中定义了Employee类。现在,如果你使用这两个框架,你将无法确定你想在代码中使用哪个Employee,但如果它们分别在com.example和org.example包中定义,你可以告诉编译器/ JVM你具体是哪个类提到。如果未定义唯一包,则会出现编译错误或运行时错误,例如:如果您正在使用com employee类,但是首先从类路径加载组织雇员类,您将收到运行时错误,因为这两个雇员类可能没有相同的结构。

答案 3 :(得分:2)

Class Loading需要唯一性。

它有助于避免命名冲突。如果存在具有相同包名和类名的类,则在尝试加载类时会发生冲突。

如果有多个库(jar)包含具有相同名称的类,则通常会发生这种情况 另请参阅this

答案 4 :(得分:0)

如果您可能需要将代码与第三方软件集成,或者将其提供给其他人进行集成,则需要具备唯一性。如果您不遵守规则,则会增加在某些时候您将发生类命名冲突的风险,并且您需要重命名许多类来解决它。或者更糟糕的是,您的客户将不得不重新命名代码。

当代码作为组织中不同项目的一部分生成时,这也适用。

答案 5 :(得分:0)

正如你所说,它带来了独特性,特别是在使用第三方代码时需要的东西。例如,假设您使用的是我制作的库。我使用了包“foo”并在那里有一个名为Bar的类。现在,如果您还使用包名“foo”并且您有一个名为Bar的类,这将意味着您的实现将覆盖我的Bar实现,使我的实现无法访问。另一方面,如果我的包是“com.mydomain.foo”并且我在那里使用了Bar类,那么你可以在你的一个类中自由使用名称Bar,这两个类仍然可以被唯一标识并单独使用

为什么使用反向域名作为包名?我想这只是一个约定,以确保每个人都使用唯一的命名空间,因为你不应该在你的包名中使用别人的域。