【问题标题】:Why Can I Import a Specific Class But Not Its Package in Java? [duplicate]为什么我可以在 Java 中导入特定的类而不是它的包? [复制]
【发布时间】:2013-09-30 21:02:45
【问题描述】:

我是 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

但是我已经检查了,双重检查,三重检查和四重检查文件是否在正确的位置;此外,如果这是问题,那么在按特定类名导入时它不会失败吗?在我决定需要在这个问题上寻求帮助之前,我已经被难住了一段时间。 :(

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

如果有人能解释什么会导致这样的情况,以便我以后可以防止它发生,我将非常感激。

【问题讨论】:

  • 试试javac -cp . *.java
  • 有时会发生神秘的事情,通常对项目进行清理可以创造奇迹
  • 谢谢@ghoulfolk - 在尝试了各种困难的解决方案之后,它归结为这样简单的事情。我仍然不知道为什么,但只是删除了很多文件并从头开始重新编译终于让它工作了。感谢您的建议!

标签: java class import package


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-11-17
    • 2011-01-03
    • 2016-02-11
    • 2010-12-05
    • 2015-05-08
    • 2018-12-17
    • 2018-03-05
    相关资源
    最近更新 更多