Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Eclipse:无法将类解析为类型继承_Java_Eclipse - Fatal编程技术网

Java Eclipse:无法将类解析为类型继承

Java Eclipse:无法将类解析为类型继承,java,eclipse,Java,Eclipse,我遇到了一个问题,当我在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:

我遇到了一个问题,当我在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放回包里,b从那以后一切都很好


此代码从此点开始编译并正确运行。

按如下方式导入包

import a.clazz;
不是因为包是java中的保留关键字

import package.a.clazz;

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

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


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

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

public abstract class clazzy extends package.a.clazz {
但我真的不知道你为什么要这么做而不是

import package.a.clazz;

public abstract class clazzy extends clazz {
事实上,Eclipse中的“move”之所以有效,是因为Eclipse在将
clazzy
移动到新包时,会自动为您添加
import
语句


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

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

import javax.persistence.InheritanceType;

希望它可以帮助某人:)

在尝试子类化之前是否导入了类?在尝试从
clazz
继承之前是否导入包
a
?是否从import语句中收到错误或警告消息?是否所有包都在同一个项目中?如果没有,则需要将一个项目添加到另一个的生成路径。所有项目都是相同的。请注意第二段,我注意到移动clazzy,然后将其移回可以解决问题。谢谢,但请查看我的编辑。我正在这样做。我将添加进一步的编辑来澄清这一点。啊,对不起,我误读了你的帖子。package.a.clazz很好,但它是在我打开项目时存在的导入,它首先会遇到这个问题。package是您的包名吗?不,它是通用的。我已经多次遇到这个问题,不管包名如何。啊,也许这是一个混乱的根源。我只是简单地使用泛型词来表示我在各种包名上下文中遇到过这种情况。我的代码中实际上没有使用“package”或“clazz”或“clazzy”。@user2757729哦,好的。。。在这种情况下,请忽略这个答案。虽然这是一个很好的冲动,但还是投票给了你一个好的想法。我很好地导入包;我不想做的是:导入package.a.*;这也是其他几个人的建议。我这样做的原因有两个:1)它阻挡了意图。2) 它将一堆未命名的内容带到名称空间中。