为什么这段代码是用eclipse编译器编译的,而不是用javac(maven)编译的



有很多这样的问题。我浏览了大部分,但实际上没有,但我无法找到任何答案:

在我的一个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编译时,我得到了以下错误:

找不到符号符号:class查看

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中无效)。然而,我不确定这是否也是同样的问题。

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 {

}

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

相关内容

  • 没有找到相关文章

最新更新