更改函数原型生成"cannot be resolved. It is indirectly referenced"错误



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

我确实发现了一篇帖子RAP:如何访问ViewPart中的Object,这可能暗示了我的问题。

尽管我运行的是Eclipse 3.6.1,但我认为这个问题是关于通用Java的。我的主要问题是,我在一个Eclipse项目中有一个类(类a),它在Eclipse插件项目中使用另一个类别(类B)。A不能调用任何需要String作为参数之一的类B函数。我生成了一个使用类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文件中间接引用的

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

如有任何见解,我们将不胜感激。

这不是运行时的问题,所以如何运行程序并不重要。您会得到编译错误。

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

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

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

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

好。当我读到这个问题时,您正试图实例化一个对象,该对象的超类(ViewPart)不在类路径中,即使该部分本身在类路径。通常这不会是一个问题,但引用项目不是一个插件,因此它的类路径中没有PDE容器来提供这些其他类。

我只能建议你不要直接实例化类,而是从绘图仪插件中的工厂类中获得一个实例。通过:

  • 在绘图仪的插件中创建接口
  • 使绘图仪实现此接口
  • 使工厂返回接口的实例

这应该让你做你想做的事。

顺便说一句。。。实例应定义要在绘图仪上调用的任何方法。

相关内容

最新更新