诸如此类的问题还有很多。我经历了其中的大部分,但实际上没有,但我无法想出任何答案:
我的 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
View指的是View
界面中的com.gwtplatform.mvp.client
包裹。
我还有其他看起来相同并且工作正常的课程。
奇怪的是,如果我更改导入的顺序或者指定确切的包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 访问“View”的优先级顺序可能与 javac 不同。很有可能 Javac 按照 Java 语言指南中指定的顺序实现该顺序,或者 Java 指南尚未宣布解决冲突的同名类的“一个真正的顺序”。通常这不是问题,因为在 Java 中不允许两次使用相同的非完全限定名称;然而,对于内部类,规范可以被“解决”。
我会让
public interface MyView extends View {
}
仅绑定到一个视图(不知道是否com.gwtplatform.mvp.client.View
or MyPresenter.View
是正确的)通过明确名称。
public interface MyView extends MyPresenter.View {
}
or
public interface MyView extends com.gwtplatform.mvp.client.View {
}
这样,您就不会成为接口以依赖于编译器的方式“绑定”到错误类型的受害者。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)