java - 更改函数原型(prototype)会生成 "cannot be resolved. It is indirectly referenced"错误

标签 java eclipse-plugin

在研究这个问题时,我遇到了很多帖子,这些帖子都出现了与本文标题类似的错误。这个问题的不同之处在于,只有当我尝试将 String 传递给我正在开发的插件类的函数时,错误才会出现。

我确实找到了一篇文章RAP: How to access Object in ViewPart这可能暗示了我的问题。

虽然我运行的是 Eclipse 3.6.1,但我认为这个问题是关于一般 Java 的。我的主要问题是,我在一个 Eclipse 项目中有一个类(类 A),它在 Eclipse 插件项目中使用另一个类(类 B)。 A 无法调用 B 类的任何需要 String 作为参数之一的函数。我生成了一个使用类 B 的虚拟类 C(以及一个虚拟 Java 项目),但我仍然遇到相同的问题。让我详细说明一下。

我在 Eclipse 中有两个项目。其中之一是一个 Eclipse 插件项目,它包含一个本质上是绘图仪并扩展org.eclipse.ui.part.ViewPart的类。我正在从另一个非插件项目实例化此绘图仪类,该项目无法调用绘图仪类中需要 String 作为参数之一的任何成员函数。

例如下面的代码片段:

Plotter myPlotter = new Plotter();    
myPlotter.plot();

从我的非插件项目运行时可以正常工作。但是,如果我修改 plot 以期望 String (例如,对于标签),或者甚至创建一个打印 String 的新函数:

Plotter myPlotter = new Plotter();
String theString = "I'm the String";
myPlotter.plot(theString);
myPlotter.printMe(theString);

Eclipse 在 printMeplot 下显示红色下划线,指示错误。当我将鼠标悬停在 printMe 上时,出现错误: 无法解析类型 org.eclipse.ui.part.ViewPart。它是从所需的.class文件间接引用的

为了更好地理解这个问题,我在插件项目中构建了另外两个类来测试这个问题,一个类的父类(super class)是 java.lang.Object,另一个类的父类(super class)是 org.eclipse.ui.part.ViewPart。我可以从基于 Object 的类中调用带有 String 参数的函数,但无法从基于 ViewPart 的类中调用带有 String 作为参数的函数。所以它与 ViewPart 有关(我可以深入到后续的父类(super class),但如果该类继承自 EventManager,仍然存在问题)。只是为了好玩,我尝试更改类,使其扩展 Vector 并且我的问题消失了。在我看来,问题与 EventManager 和/或 ViewPart 有关。

任何见解将不胜感激。

最佳答案

这不是运行时问题,因此如何运行程序并不重要。您会遇到编译错误。

Chris Gerken 是对的,但您没有尝试他的解决方案,所以我将尝试解释为什么他是对的。

当 Java 编译器查看您的代码时,它需要知道您调用的类的定义。有时它还需要知道所有继承成员的定义(例如,在解析重载方法调用时)。你好像遇到了那个案子。现在,如果您的类路径仅包含您的 plotter 项目,而不包含定义 ViewPart 的 jar,则它将失败并显示此消息。

您可以通过在类路径上添加正确的 jar 来解决这个问题(您需要稍微修改一下以找出它是在哪个 jar 中定义的)。否则,您可以导出绘图仪类路径上的所有库(项目属性/Java 构建路径、顺序和导出选项卡 - 选择全部)。

Chris 的解决方案通过创建一个由绘图仪项目托管的新界面(不扩展任何内容)来解决这个问题。使用该接口(interface)没有依赖项(但您需要能够创建一个依赖项,因此需要创建工厂)。

关于java - 更改函数原型(prototype)会生成 "cannot be resolved. It is indirectly referenced"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12396494/

相关文章:

java - Class.forName 调用后如何释放内存?

java - SimpleDateFormat 宽容导致意外行为

java - 使用 jackcess 从 MS Access DB 获取查询数据?

java - Eclipse插件开发: Vertically scrolling table?

java - Easy Struts 插件需要'org.eclipse.update.ui.forms

java - 是否有用于 IntelliJ IDEA 的 GWT UI 设计器?

java - 如何在不使用Eclipse的情况下在spring和maven中运行Hello World程序

java - 自动将输出发送到 Java Eclipse 中的程序参数

eclipse - 以编程方式显示Eclipse插件中的 View

java - STAN4j 中的 "System Exclusions"是什么?它们来自哪里?