【问题标题】:why does this code compile with eclipse compiler but not with javac (maven)为什么这段代码用eclipse编译器编译而不用javac(maven)编译
【发布时间】:2012-02-14 06:05:33
【问题描述】:

有很多这样的问题。我经历了其中的大部分,但实际上都没有,但我想不出任何答案:

我的 GWT/GWTP 课程中有一个奇怪的问题。
该类使用 Eclipse 编译器编译良好,但使用 javac 编译器 (Maven) 编译失败。

//additional imports
import com.gwtplatform.mvp.client.PresenterWidget;
import com.gwtplatform.mvp.client.View;

public class MyPresenter extends PresenterWidget<MyPresenter.MyView> {

    public interface MyView extends View {


    }

    some code
}

当我尝试使用 maven 编译时出现以下错误:

找不到符号符号:类查看

View指的是com.gwtplatform.mvp.client包中的View接口。

我还有其他看起来相同且工作正常的课程。
奇怪的是,如果我更改导入的顺序或指定 View 接口的确切包,它在 maven 中编译没有任何问题。
具体来说,我移动了com.gwtplatform.mvp.client.View的导入

import com.gwtplatform.mvp.client.View;
//additional imports
import com.gwtplatform.mvp.client.PresenterWidget;

前段时间我遇到了类似的问题,即引用内部类的类之间的循环继承问题(在 eclipse 中工作但在 javac 中没有)。但是我不确定这是否是同一个问题。

【问题讨论】:

  • 不确定问题的根本原因,但内部接口不是很漂亮,可能会导致对依赖项的来源产生混淆。
  • 你是对的,我认为将接口移出类会修复它(虽然我还没有验证它)。我只是好奇这种奇怪行为的解释可能是什么(移动导入会导致代码编译或不编译)

标签: java gwt compiler-errors gwt-platform


【解决方案1】:

Eclipse 的编译器实际上是与 javac 编译器不同的编译器。有时他们在行为上分道扬镳,但通常他们很快就和解了。

当 Java 的泛型问世时,这一点非常引人注目。在某些情况下,eclipse 发现 javac 允许的泛型指令有问题,或者 javac 发现 eclipse 允许的泛型指令有错误(不记得它以哪种方式分开,太久以前了)。在任何一种情况下,javac 都更有可能是正确的实现。

在您的情况下,您使用对内部类的泛型引用污染了命名空间。奇怪的是,eclipse 以与 javac 不同的优先级顺序访问“视图”。 Javac 实现了 Java 语言指南中指定的顺序,或者 Java 指南尚未宣布解决冲突的同名类的“一个真正的顺序”的可能性非常大。通常这不是问题,因为不允许在 Java 中两次使用相同的非完全限定名称;但是,对于内部类,规范可以在某种程度上“变通”。

我会做的

public interface MyView extends View {


}

通过明确的名称绑定到一个视图(不知道com.gwtplatform.mvp.client.ViewMyPresenter.View 是否正确)。

public interface MyView extends MyPresenter.View {


}

public interface MyView extends com.gwtplatform.mvp.client.View {


}

这样您就不会成为接口以依赖于编译器的方式“绑定”到错误类型的牺牲品。

【讨论】:

  • 哇。在将 Java 项目从“nothing-just-hit-compile-in-Eclipse”转换为 Maven 的过程中,我遇到了这个问题。 Java 编译器会抱怨缺少的符号并没有丢失,因此查找此问题的原因很棘手。将外部类中的内部类引用为 Inner.Inner 有效,但带有 Outer.Inner.Inner 导入的 Inner 仅适用于 Eclipse,而不适用于 Maven。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
相关资源
最近更新 更多