【发布时间】:2014-06-23 00:43:56
【问题描述】:
我只是对某事感到好奇。假设我有以下环境:
文件夹结构-
projects \ prj1 \ src \ pkgs \ main (contains Main.java)
\ test (contains TestClass.java)
Main.java -
package pkgs.main;
import pkgs.test.TestClass;
class Main {
public static void main(String[] args) {
TestClass tc;
}
}
基于 Java shell 的编译命令 -
javac -d ..\cls -sourcepath ..\src ..\src\pkgs\main\Main.java
java -classpath ..\cls pkgs.main.Main
如果我创建一个名为 Default.java 的 .java 代码文件,它没有包语句 -
public class Default {}
把这个文件放到src文件夹下,Main.java这样的类文件怎么访问这个Default类呢?我尝试使用以下 import 语句,但都不起作用,导致编译错误:
Main.java -
package pkgs.main;
// import Default; (causes many compilation error messages)
// import .Default; (causes "identifier expected" compilation error)
我还将 Default.java 文件从 src 文件夹移到包含 Main.java 的同一文件夹中,但这也不起作用。我很欣赏这整个想法似乎是糟糕的设计,但我这样做只是为了更多地了解包和导入语句的工作原理,以及项目文件夹结构。谢谢。
【问题讨论】:
-
您是否尝试过只使用
Default而不导入它?如果Default也在您要导入的某个包中,那将无法正常工作,但我认为没有办法解决这个问题 - 这只是始终使用包的另一个原因。 -
一旦你给一个类一个包,任何没有显式导入的类都将被假定在同一个包中。所以不,默认包中的一个类只是变得“不可见”,我想不出一种方法可以解决这个问题。也不是你为什么想要。
-
@Jon Skeet,我确实尝试过;显示的错误消息是“找不到符号”。另外,我尝试将 Default.java 类文件移动到与 Main.java 相同的文件夹中,但这会产生“无法访问默认/错误源文件”错误消息。
-
有趣 - 我期望可以工作,但如果没有,我只想说你需要为
Default使用一个包。这将比试图让它工作简单得多,IMO。我不会花时间担心无论如何都应该避免的情况。 -
@Jon Skeet,当然。我只是在尝试学习 XP ;)