为什么Java源代码中有这么多文件夹?

时间:2012-01-13 15:09:05

标签: java

每当我查看一些Java源代码时,我发现自己在一个文件夹中浏览,该文件夹中包含文件夹,其中包含文件夹等。为什么Java需要这么多嵌套文件夹,除了新的子文件夹?

例如: https://github.com/halfninja/android-dragcontrol3d/tree/master/src/uk/co/halfninja/android 这可能不是最糟糕的例子,但有两个文件夹“uk”和“co”只是没有意义。我只在Java源代码中看到这个!

例如minicraft:http://www.ludumdare.com/compo/ludum-dare-22/?action=preview&uid=398

import com.mojang.ld22.gfx.Font;
import com.mojang.ld22.gfx.Screen;
import com.mojang.ld22.gfx.SpriteSheet;

为什么不写:

import gfx.Font;
import gfx.Screen;
import gfx.SpriteSheet;

那太干净了。

(我从未用Java编程。)

8 个答案:

答案 0 :(得分:7)

这些是为了防止与其他罐子发生冲突。在包名中使用类似公司URL的内容使其可能足够独特,不会与其他人的包和类冲突。

你的例子很好,因为想象两个人想要使用“gfx”作为包名并使用Font或Sprite这样的类似乎是合理的。现在,如果你想同时使用它们,那么你怎么能包名和类名?

答案 1 :(得分:3)

你的方式更干净,但它假设世界上没有其他人会创建一个名为gfx的包,这是一个非常弱的假设。通过预先设置反向域名,可以创建一个避免冲突的唯一命名空间。

这完全符合遍布Java编程的“共享文化”,其中应用程序通常组合来自许多来源的大型库。

答案 2 :(得分:1)

在Java中,惯例是命名您的包(对应于包含您的代码的文件夹结构)以及标识您的组织的信息(通常包括TLD和公司名称)和项目(可能会添加更多部分)

这样更具体的特性也降低了命名空间意外碰撞的可能性。

答案 3 :(得分:1)

它只是一种防止名称空间冲突的组织技术。没有更多或更少。 Java包名称与底层目录结构匹配,因此包级别的任何组织模式都将反映在那里。团队通常以其组织名称和特定蜡来开始他们的包名。这只是惯例,但它是根深蒂固的,应该在没有充分理由的情况下遵循。

答案 4 :(得分:1)

所有关于命名空间的内容。使用“命名空间”,您可以创建2个具有相同名称的类,位于不同的包/文件夹中。此命名空间逻辑还可用于创建“访问权限”等。以下是一些链接:

1)Namespace 2)Java Package 3)Java Package Naming Conventions

编辑:让我们假设您正在创建一个新项目,并使用来自公司/组织的两个开源框架 - comA和comB。另外,让我们假设comA和comB在他们的项目中创建了一个具有相同类名的类。现在,使用Java包命名约定,我们有com.comA.SomeClass和com.comB.SomeClass。您可以导入和使用类中的两个类,而不会发生冲突。这只是一个简单的例子。此命名约定还有其他用途。

答案 5 :(得分:0)

如果您想与其他人共享代码,但使用通用名称而不会发生冲突。将您的域名(向后)包含在内的良好做法

每个人都写一个名为gfx.Font的软件包,您将无法在同一个应用程序中使用多个版本。

您可能会觉得您的代码不会与世界共享(甚至不应该共享)在这种情况下,缩短的包结构可能会更简单。

如果您使用IDE,它可以很好地隐藏长包结构,因此您无需担心它。

答案 6 :(得分:0)

Java不需要任何东西:您可以将所有类放在默认包中并冲走。但对于认真的项目来说,这种组织不仅是明智的,而且是强制性的com.mojang.ld22部分只是一个惯例:

  • com = or or org,java / javax for official packages
  • mojang =第二部分是公司名称
  • ld22 =第三部分是申请名称

答案 7 :(得分:0)

这是由于推荐的包装结构。在大型项目中,使用了如此多的包/库,并且为了不将源文件放入与另一个库相同的文件夹中,程序员将其源代码放入唯一的文件夹中。由于网站是独一无二的,因此使用看似网站文件夹结构的包装结构是一种惯例。