由于某些原因,我需要在项目中使用包的长名称。像:
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有效。但我不确定这种做法是否会导致进一步的问题?也许在不同类型的类加载器等不同的环境中?
答案 0 :(得分:8)
在Scala中,目录名称不必映射到源文件中声明的包,编译器不会以任何方式强制执行此操作。
在Java中,你无法做到这一点。源文件必须位于正确的目录(由声明为源文件的包名称),以便编译。
所以,如果你在Scala中,你可以在Java中尽可能多地使用它,不,你不能。
答案 1 :(得分:4)
Scala并不关心你的目录是什么命名,Java确实如此。如果您有Java代码,请遵循其约定。对于Scala,做任何你想做的事情(包括不使用目录的包名)。
答案 2 :(得分:3)
我不建议这样做。正如Oracle package name documentation中所讨论的那样,需要在限定类名和目录位置之间进行转换的许多工具只需替换“。”使用文件分隔符,你的名字就会破坏它。