【问题标题】:What Can A Java Package Be Compared To In .NET?Java 包可以与 .NET 中的什么进行比较?
【发布时间】:2012-06-27 01:29:30
【问题描述】:

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

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

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

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

【问题讨论】:

  • 带有main函数的类名没有作用。这听起来像是您组织的惯例。

标签: java naming-conventions packages


【解决方案1】:

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

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

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

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

package example;
public class Example { }

在一个单独的文件中

package separateexample;
public class Example {}

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

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

欲了解更多信息,请查看the java tutorial

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

com.example.myapp.Example

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

所以要回答你的主要问题,Java 中的packages 与.Net 中的namespaces 的概念相同

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 2015-03-08
    • 2020-10-10
    • 1970-01-01
    • 2017-06-10
    • 2016-07-10
    • 1970-01-01
    相关资源
    最近更新 更多