GWT中JSNI调用Java方法的Type Signatures详解

需积分: 10 8 下载量 92 浏览量 更新于2025-01-02 收藏 75KB PDF 举报
"JSNI (Java to JavaScript Native Interface) 是 GWT (Google Web Toolkit) 中的一个特性,允许JavaScript代码直接调用Java方法。在使用JSNI进行Java方法调用时,需要正确地指定类型签名(Type Signatures),这是为了在动态类型的JavaScript和静态类型的Java之间进行类型转换的关键。类型签名是Java虚拟机(JVM)用来表示方法和类型的字符串表示形式,它确保了在Java和JavaScript之间数据类型的兼容性。" 在Java中,每种数据类型都有其对应的类型签名,如表所示: - `Z` 对应 `boolean` - `B` 对应 `byte` - `C` 对应 `char` - `S` 对应 `short` - `I` 对应 `int` - `J` 对应 `long` - `F` 对应 `float` - `D` 对应 `double` - `Lfully-qualified-class;` 对应引用类型(类或接口),如 `Ljava/lang/String;` 对应 `String` - `[type` 对应数组类型,如 `[I` 对应 `int[]` 例如,Java方法 `long f(int n, String s, int[] arr);` 的类型签名是 `(ILjava/lang/String;[I)J`。这个签名按照以下规则构成: - 开括号`(`开始,按参数类型顺序列出参数的类型签名。 - 参数列表结束后,闭括号`)`关闭,然后是返回值类型签名。 在GWT环境中,通过JSNI调用Java方法时,需要遵循这种类型签名的规则来定义函数指针,确保参数和返回值的类型匹配。例如,如果要从JavaScript调用上面的 `f` 方法,可能会这样写: ```javascript var myInstance = $wnd.myJavaClass.getInstance(); myInstance.f(123, "example", [4, 5, 6]); ``` 这里 `$wnd` 是一个全局对象,代表浏览器的 `window` 对象,`myJavaClass.getInstance()` 返回一个Java实例,而 `f` 是一个JSNI方法,接受一个整数、一个字符串和一个整数数组作为参数,并返回一个长整数。 在编写JSNI代码时,使用GWT的Web模式运行可以帮助进行调试,因为GWT会将Java代码编译为优化过的JavaScript,而在Web模式下,可以更容易地跟踪和理解JavaScript与Java之间的交互。 总结来说,JSNI中的类型签名是连接JavaScript和Java的重要桥梁,它们定义了方法的参数类型和返回类型,确保在两种不同类型的环境中数据类型的正确传递。理解并正确使用这些签名对于有效地利用GWT的JSNI功能至关重要。