我可以指定一个“";“基本包路径”;Java中的目录?
如果我有一个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
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:好问题。规范对存储的要求不像我想的那么严格。这对进口产品有好处吗?虽然这可以解决所述问题,但你真的认为这不是一个好主意,是吗?;)