为什么我可以导入特定类但不是Java中的包?

时间:2013-09-25 10:10:41

标签: java class import package

我是Java的新手,所以很难理解'包'范例。

我正在使用别人的软件包Framework来构建我的程序。

当我这样做时,一切正常:

import Framework.Item1;
import Framework.Item2;
import Framework.Item3;

当我这样做时,没有任何作用:

import Framework.*;

当我尝试在控制台上使用javac.exe进行编译时失败,它在编译时停止。错误如下:

error: cannot access Item1
bad class file: ...\Framework\Item1.class
class file contains wrong clsas: Framework.Item1
Please remove or make sure it appears in the correct subdirectory of the classpath

但我检查过,双重检查,三重检查,并检查文件是否在正确的位置;而且,如果那是问题,那么在按特定的类名导入时不会失败吗?在我决定需要寻求帮助之前,我已经被困了一段时间。 :(

编辑:在尝试了许多简单和复杂的解决方案之后,答案终于只是保存我的所有工作,清理项目并重新编译。然后一切都像魔法一样。

如果有人能解释会导致这种情况的原因,以便将来可以阻止它,我会非常感激。

1 个答案:

答案 0 :(得分:4)

您似乎在包和类之间存在命名冲突。可能有一些重构会留下旧的类文件。

如果Framework不是包,而是包含Item1作为其嵌套类的类,则会出现错误。另一种可能性是你在编译时只是使用了错误的目录作为源代码根目录。

在任何情况下,如果遵循Java命名约定,则不会将包称为Framework,而是framework,并且不会出现这种情况。