在GWT中,类类型是如何传递给JSNI代码的?

在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

我正在包装一个JS库,其中一个方法将类/原型作为参数。即:

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()方法访问它有什么问题呢?