Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以指定一个“";“基本包路径”;Java中的目录?_Java_Directory_Nested_Classpath_Packages - Fatal编程技术网

我可以指定一个“";“基本包路径”;Java中的目录?

我可以指定一个“";“基本包路径”;Java中的目录?,java,directory,nested,classpath,packages,Java,Directory,Nested,Classpath,Packages,如果我有一个Java包,例如: package org.foo.bar.stuff; 我可以将源.java文件存储在src/org/foo/bar/stuff目录中,因为我将src/添加到我的类路径中。在本例中,目录内容树如下所示: `-- src `-- org `-- foo `-- bar `-- stuff |-- ICat.java

如果我有一个Java包,例如:

package org.foo.bar.stuff;
我可以将源
.java
文件存储在
src/org/foo/bar/stuff
目录中,因为我将
src/
添加到我的类路径中。在本例中,目录内容树如下所示:

`-- src
    `-- org
        `-- foo
            `-- bar
                `-- stuff
                    |-- ICat.java
                    `-- IMouse.java
`-- src
    `-- stuff  # has defined base "org.foo.bar"
        |-- ICat.java
        `-- IMouse.java
如果我可以为
/stuff
这样的目录定义一个“基本”包名,例如
org.foo.bar
,那么树可能会变成这样:

`-- src
    `-- org
        `-- foo
            `-- bar
                `-- stuff
                    |-- ICat.java
                    `-- IMouse.java
`-- src
    `-- stuff  # has defined base "org.foo.bar"
        |-- ICat.java
        `-- IMouse.java

从技术上讲,有没有一种方法可以为像
/stuff
这样的目录定义一个“基本”包名,即
org.foo.bar
,以避免嵌套目录?

虽然Java规范没有强制执行它,但所有知名的编译器都使用目录结构。该规范明确声明了一个用于存储类的数据库,它根本不使用任何目录

简短回答:如果您使用的是标准Java工具,那么就无法避免嵌套目录

每个主机系统都决定如何使用包和编译单元 创建并存储

在JavaSE平台的简单实现中,包和 编译单元可以存储在本地文件系统中。其他 实现可以使用分布式文件系统或一些 数据库的形式

如果主机系统在数据库中存储包和编译单元, 那么,数据库不得对其施加可选限制(§7.6) 基于文件的实现中允许的编译单元

但是,使用数据库的系统必须提供 出于以下目的,将程序转换为符合限制的形式 导出到基于文件的实现


(听起来你在解决真正的问题。)

虽然这是可能的,但我不一定赞同。 如果(出于某种原因)您不想将类嵌套到包中,您可以将类嵌套到类中(如果您真的想)


然后
it.is.a.Demo.a
it.is.a.Demo.B
Demo

一起分组。但是您可以使用内部类来实现类似的功能。@ElliottFrisch这不会改变访问修饰符或信息隐藏吗?你能举个例子吗?@Chris出版时,我可以方便地使用“我的方式”并将树转换为标准结构。不管嵌套目录最终对消除歧义有多有用,它们都是一个令人烦恼的问题(甚至像Eclipse这样的IDE也对它们进行了分组)。Eclipse有一个选项可以将空目录压缩成一行。@克里斯:是的,我想“分组”的意思也是一样的。真正的问题是,我感兴趣的是,除了IDE之外,是否还有其他方便的方法来浏览源代码树,例如shell/命令行、标准UTIL等等。我的意思是,如果没有任何选择,我可以使用IDE,但这是值得一问的。我明白了。我不是在尝试优化,这只是一个暂时的转变。见我的评论。我想我可以临时重命名整个包。:)为了回答这个问题,你是否碰巧熟悉JLS中定义这个问题的部分?@naxa:好问题。规范对存储的要求不像我想的那么严格。这对进口产品有好处吗?虽然这可以解决所述问题,但你真的认为这不是一个好主意,是吗?;)