2

由于某些原因,我需要在我的项目中使用包的长名称。喜欢:

com.example.foo.bar.bazz.anotherlongsubpart.andfinallytheactualpackagname

因此,考虑到命名约定(至少我知道 Java 中的命名约定),我必须创建适当的目录结构,用斜杠替换点:

com/example/foo/bar/bazz/anotherlongsubpart/andfinallytheactualpackagname

至于我,它看起来太丑了 :) 所以我试着用斜线只替换点的一部分:

com.example.foo.bar.bazz.anotherlongsubpart/andfinallytheactualpackagname

换句话说,我这里有一个长名称“com.example.foo.bar.bazz.anotherlongsubpart”的包/目录和另一个带有“andfinallytheactualpackagname”的包/目录。这样做合法吗?我尝试使用 Simple Build Tool 编译所有这些东西,并在其上运行我的单元测试。而且效果很好。正如我会以更普通的方式用斜线命名它。

因此,正如我的实验所示,它至少在 SBT 上运行良好。但我不确定这种做法是否会导致进一步的问题?也许在不同的环境中使用不同类型的类加载器等?

4

3 回答 3

8

在 Scala 中,目录名不必映射到源文件中声明的包,编译器不会以任何方式强制执行此操作。

在 Java 中,你不能这样做。源文件必须位于正确的目录(由声明为源文件的包名称所指示)才能编译。

所以,如果你在 Scala 中,你可以随心所欲地做,在 Java 中,不,你不能。

于 2013-10-05T20:14:39.540 回答
4

Scala 不在乎你的目录叫什么,Java 会。如果您有 Java 代码,请遵循其约定。对于 Scala,做任何你想做的事(包括不使用目录的包名)。

于 2013-10-05T20:14:52.120 回答
3

我不建议这样做。正如Oracle 包名文档中所讨论的,许多需要在限定类名和目录位置之间进行转换的工具将简单地替换“.”。使用文件分隔符,你的名字会破坏它。

于 2013-10-05T20:03:01.190 回答