Scala / Java子目录,名称中带有点

时间:2013-10-05 19:54:44

标签: java scala classloader sbt

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

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有效。但我不确定这种做法是否会导致进一步的问题?也许在不同类型的类加载器等不同的环境中?

3 个答案:

答案 0 :(得分:8)

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

在Java中,你无法做到这一点。源文件必须位于正确的目录(由声明为源文件的包名称),以便编译。

所以,如果你在Scala中,你可以在Java中尽可能多地使用它,不,你不能。

答案 1 :(得分:4)

Scala并不关心你的目录是什么命名,Java确实如此。如果您有Java代码,请遵循其约定。对于Scala,做任何你想做的事情(包括不使用目录的包名)。

答案 2 :(得分:3)

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