1

我已经使用 .NET 多年,但最近我遇到了一个简单的 Java 项目。语法很容易学习 - 非常简单和常见。然而,最让我困惑的是项目结构。

在 .NET 中,我非常习惯于使用类来包含我的不同内容,但是,这Packages让我感到困惑。它们看起来几乎像 .NET 命名空间,只是它们实际上会影响项目目录布局。

不仅如此,命名约定对我来说绝对是陌生的。我被告知要使用公司网站反向命名软件包,并在末尾加上应用程序名称(例如com.company.www.applicationname)。不仅如此,我还被告知将主类命名为应用程序的名称。现在看起来几乎是多余的(类名、包名和项目名)。

那么这一切是怎么回事呢?我可以将这些包与 .NET 中的哪些包进行比较,我该如何理解它们?- 命名约定是什么?

4

1 回答 1

3

packages在 Java 中是一种实现方式,以便不同的库可以重用类名而不会相互冲突。包就像语言提供的另一个范围规则。例如:

public class Example {
    String exampleString = "example";
}

public class Another {
    String exampleString = "This would never work with a global name space";
}

我们可以在同一个程序中拥有两个String具有标识符的对象,exampleString因为它们位于不同的scope. 相似地,

package example;
public class Example { }

并在一个单独的文件中

package separateexample;
public class Example {}

我们可以有一个同名的类名,因为它是不同的作用域。我们仍然可以唯一地指定对象:

example.Exampleseparaeteexample.Example 这些是这些类的完全限定类名。

有关更多信息,请查看java 教程

至于 Java 包的约定:如果你想写一个库并且有很多人使用它,你需要确保没有命名冲突。可以像上面那样使用包来避免它们 - 但为了确保不会发生冲突,例如包名称本身,您需要一个完全全球唯一的包名称,您可以确保在尝试使用时没有其他公司会使用使用您的产品。域名恰好是全球唯一的字符串,因此将您的公司域名用作包名是惯例,相反。

com.example.myapp.Example

只要您真正拥有 example.com,就永远不会发生冲突(并且没有人违反惯例)

因此,在 Java 中回答您的主要问题与.Netpackages中的概念相同namespaces

于 2012-06-27T01:41:43.710 回答