在GWT中,类类型是如何传递给JSNI代码的?
我正在包装一个JS库,其中一个方法将类/原型作为参数。即:在GWT中,类类型是如何传递给JSNI代码的?,gwt,jsni,Gwt,Jsni,我正在包装一个JS库,其中一个方法将类/原型作为参数。即: installPlugin(Prototype) 这个方法的包装JSNI函数看起来如何 public final void native installPlugin(Class<?> clazz) /*-{ this.installPlugin(clazz); }-*/; public final void native installPlugin(clazz类)/*-{ 这个.installPlugin(cla
installPlugin(Prototype)
这个方法的包装JSNI函数看起来如何
public final void native installPlugin(Class<?> clazz) /*-{
this.installPlugin(clazz);
}-*/;
public final void native installPlugin(clazz类)/*-{
这个.installPlugin(clazz);
}-*/;
这是不正确的,但符合我想要实现的目标 原型应该具有.toJs()方法,该方法将原型转换为JavaScriptObject类型。传递它而不是Java原型 这是不可能的。在GWT中,对象知道它们的类(由
getClass()
返回),但是class
实例没有对允许创建该类实例的构造函数/原型的引用
如果您可以传递一个类的实例,那么您应该能够只使用
obj.prototype
。不过,它在DevMode中不起作用,因为Java对象在传递给JSNI时是不透明的句柄。谢谢@ThomasBroyer,这是一个合理的解释。感谢关于不透明手柄的警告。我很好奇DevMode将如何响应。我可能会坚持我的硬编码本机方法installPluginSoundJS()/*-{installPlugin(SoundJS);}-*/
并按照您建议的方式实现该方法,使用obj.prototype
注意DevMode警告。欢呼JSNI不是这样工作的。只有JS可以创建JSO。JSO只能在JS中本机创建,GWT框架/编译器允许从Java引用JSO。如果他编写包装器,他可能会在Java构造函数中使用原型JSNI构造函数,是吗?那么,将JavaScriptObject存储为Java包装器的私有字段并随时使用.toJs()或.getJs()方法访问它有什么问题呢?