我刚刚尝试了GWT的编辑器框架并将其用于一个小例子.但我想知道为什么副编辑需要包私有?
链接页面中的示例中有一条注释专门提到了受包保护的字段,但我找不到原因.
// Sub-editors are retrieved from package-protected fields, usually initialized with UiBinder.
// Many Editors have no interesting logic in them
public class PersonEditor extends Dialog implements Editor<Person> {
Label nameEditor;
AddressEditor addressEditor;
...
}
Run Code Online (Sandbox Code Playgroud)
在我尝试自己的例子中,如果我的子编辑器是包私有的,我只能使用它,如果我将它们设为私有,则绑定不再起作用.
任何人都可以向我解释为什么存在这种限制?它使我的编码风格看起来有点不一致.谢谢!
与UiBinder类似,EditorDriver生成类的生成器也是沿着Editor类生成的.这些类需要访问编辑器才能使用它们.
换句话说,编辑器框架不会修改你的类(没有魔法),所以你必须以某种方式暴露你的子编辑:package-private就足够了,但public当然也会工作.
了解正在发生的事情的最好方法是将-gen选项(后跟目录路径)传递给dev模式的GWT编译器,以便将所有生成的类输出到磁盘.但请注意:编辑器框架很难理解!
此外,如果您的编辑器在另一个包含子编辑器(您要继承)的包中扩展了其他类,则该子编辑器必须在子类的包中可见,因此它必须public位于父类中,或者由子类显式公开(使用不是的访问器方法private).