使用GWT.Create和UI-Binder创建实例的流程

时间:2019-01-30 09:24:16

标签: java gwt uibinder

我正在查看GWT应用程序的代码。并陷入下面的代码中。

private static TestEditorUiBind uiBinder = GWT.create(TestEditorUiBind.class);

interface TestEditorUiBind extends UiBinder<Widget,TestEditorViewImpl> {}

这是我课程的前两行。然后,我们使用uiBinder.createAndBindUi(this);

创建GWT窗口小部件

我知道GWT.create将在运行时创建TestEditorUiBind的实例。

但是我不明白为什么我们在第二行声明了TestEditorUiBind接口并在GWT.create的第一行使用了接口? (我检查了TestEditorUiBind在应用程序的其他任何地方都没有声明)

如果我理解不对,请纠正我。

1 个答案:

答案 0 :(得分:0)

由于Java语言的工作方式,行的顺序无关紧要-在之内声明的新类型(枚举,接口,类)实际上变成了它自己的类型,而不是需要等待在该所有者类型内声明。看起来这两行代码都存在于TestEditorViewImpl.java中-假设是这样,java编译器实际上将创建两个已编译的字节码文件:

  • TestEditorViewImpl.class
  • TestEditorViewImpl$TestEditorUiBind.class

然后第一行只是询问TestEditorViewImpl$TestEditorUiBind的实例,无论该实例是在哪里被声明的。

是的,此静态字段可能是项目中唯一使用该类型的位置,因为它专用于将.ui.xml绑定到此类。可以使用单例,因为此绑定器将没有状态,但只会根据在TestEditorViewImpl文件中找到的内容填充.ui.xml中的字段。