java 无法将节点解析为类型

ngynwnxp  于 2023-03-11  发布在  Java
关注(0)|答案(3)|浏览(153)

我正在做一个库,我想有一个类Node,大多数时候它工作正常,但有时它会在我使用节点的每一个地方给出错误Node cannot be resolved to a type
奇怪的是,例如,如果我将类重命名为DNode,并将每个Node重命名为DNode,然后将所有内容再次更改为Node,它就像以前一样,但表示Node cannot be resolved to a type的错误消失了(直到某个时间)。
编译也没有问题,这似乎是一个Eclipse的错误或什么。
我知道有这个Node class,但我没有导入它,所以我不明白为什么这会形成一个问题。
希望有人能帮上忙。

cedebl8k

cedebl8k1#

我以前见过类似的行为,知道两个可能的原因:

  • 您的构建路径发生了某种变化,遗漏了您的Node类,或者提供它的项目出现了编译错误,或者类似情况。根据您对问题的描述,这可能与您的情况无关。
  • 一些Eclipse的失误。对我来说,这总是通过对项目(可能还有任何依赖项目)进行干净的构建来解决的,在这个时候事情会自己解决。你可以通过进入Project菜单并选择Clean来完成。这不是一个合适的解决方案,但我觉得比你的Node-〉DNode-〉Node解决方案要快。
xqkwcwgp

xqkwcwgp2#

几年前,似乎有几个人描述了这个问题(以及解决方案)。例如,this描述了这个问题,并发现在Eclipse中执行Refresh修复了它。在他的案例中,他在Eclipse外部的Eclipse Project目录中创建了一个顶级文件夹,从而导致了这个问题。这听起来像是一个存在了几年的Eclipse bug。

hmmo2u0o

hmmo2u0o3#

我在将项目升级到Java9或更高版本时遇到过这个问题。Java9引入了模块的概念,并且让多个模块“提供”一个包似乎是在Eclipse中导致此类错误消息的一个问题。错误消息... cannot be resolved to a type具有误导性,但我将其解释为... cannot be resolved to a *unique* type,那么它就有意义了。
现在要解决这个问题,你需要找出类路径上的哪些jar会导致哪些包重复,有一个简单的方法可以做到这一点:使用jdeps
例如,我使用了以下内容:

> jdeps -verbose -cp lib\* src
Warning: split package: javax.xml.stream jrt:/java.xml lib\jsr173_1.0_api.jar
Warning: split package: javax.xml.stream.events jrt:/java.xml lib\jsr173_1.0_api.jar
Warning: split package: javax.xml.stream.util jrt:/java.xml lib\jsr173_1.0_api.jar
Warning: split package: org.w3c.dom jrt:/java.xml lib\jaxen-1.1-beta-7.jar

从上面可以看出,Java标准地提供了上述XML相关模块,因此从类路径中删除列出的jar就解决了问题。在其他一些情况下,您只需要添加“API”jar,而不需要添加“IMPL”jar。例如,添加javax.servlet-api.jar而不是j2ee.jar

相关问题