我遇到了一个问题,当我在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;
这不仅不能解决问题,而且我也不想因各种原因而做。
编辑3:
我应该澄清,当我在第2段中说“移动”时,我的意思是如果我将package.b.clazzy移动到另一个包(比如package.a或package.c),eclipse似乎意识到它是愚蠢的并自行解决。如果我然后将clazzy移回package.b从那时起一切都很好。
此代码从此时开始编译并正确运行。
答案 0 :(得分:3)
我通过添加此导入解决了这个问题:
import javax.persistence.InheritanceType;
希望它可以帮助某人:)
答案 1 :(得分:2)
您的问题可能是命名问题... package
是Java中的关键字,不应用于包,变量,类等的名称。
将您的包重命名为a
。为此,您可以重新创建它或将内容移动到名为a
的新目录中,并将类顶部的包标识符更改为package a
。
答案 2 :(得分:0)
像这样导入包
import a.clazz;
不是包是java中的保留关键字
import package.a.clazz;
在代码中添加导入以继承类
答案 3 :(得分: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
语句。
另外,请小心使用正确的情况。在您的问题中,您使用了所有小写字母,但在您的修改中,您开始引用Clazz
而不是clazz
。这些是不同的,只有第一个(Clazz
)遵循标准惯例。