4

我遇到了一个问题,当我在 Eclipse 中打开项目时,跨包的类的可见性有问题。

例子:

package.a
   - public abstract class clazz
package.b
   - public abstract class clazzy extends clazz

在上面的例子中, clazzy 会有一个错误,其中 clazz 不可用。如果我将 clazzy 移入 package.a,然后将其移回 package.b,一切都很好,但否则我无法让 eclipse 识别 clazz 根本存在。

编辑1:

是的,我正在导入课程。我也按 ctrl-shift-o(导入)。如果我手动输入导入,eclipse 仍然无法识别 clazz 存在。我没有尝试导入整个包,因为通常出于各种原因我避免这样做。

编辑2:

当我第一次使用以下导入打开项目(它可能已经存在于工作区中)时:

import package.a.Clazz;

public abstract clazzy extends Clazz {
...
}

导入和 clazz 标识符都将带有红色下划线。

我收到了几个建议:

import package.a;

这不仅不能解决问题,而且出于各种 pf 原因,我也不想这样做。

编辑3:

我应该澄清一下,当我在第二段中说“移动”时,我的意思是如果我将 package.b.clazzy 移动到另一个包(比如 package.a 或 package.c)中,eclipse 似乎意识到它很愚蠢并自行排序出去。如果我然后将 clazzy 移回 package.b,那么从那时起一切都很好。

从那时起,此代码编译并正确运行。

4

4 回答 4

4

我通过添加这个导入解决了这个问题:

import javax.persistence.InheritanceType;

希望它可以帮助某人:)

于 2016-04-21T10:25:23.637 回答
2

您的问题可能是命名问题...package是 Java 中的关键字,不应用于包、变量、类等的名称。

将您的包重命名为a. 为此,您要么重新创建它,要么将内容移动到名为的新目录a中,并将类顶部的包标识符更改为package a.

于 2013-09-13T01:33:12.843 回答
0

如果你不想导入package.a.clazz(为什么不呢?)那么你需要通过它的全名来引用它,

public abstract class clazzy extends package.a.clazz {

但我真的不知道你为什么要这样做而不是

import package.a.clazz;

public abstract class clazzy extends clazz {

事实上,Eclipse 中的“移动”之所以有效,是因为 Eclipse 在移动clazzy到新包时,会自动import为您添加语句。

此外,请注意使用正确的案例。在您的问题中,您使用了所有小写字母,但在您的编辑中,您开始提到Clazznot clazz。这些是不同的,只有第一个 ( Clazz) 遵循标准约定。

于 2013-09-13T01:44:02.813 回答
0

像这样导入包

import a.clazz;

不像包是java中的保留关键字

import package.a.clazz;

在代码中添加导入以继承类

于 2013-09-13T01:22:26.370 回答