GWT JSNI拆分方法bug

时间:2013-11-26 23:40:24

标签: java string gwt jsni

我正在开发一个GWT应用程序,我正在获取一个包含select查询结果的List。此选择查询具有行。每一行都使用“::”将每个元素与上一个元素和下一个元素分开。

我正在尝试使用String.split拆分它,但它需要很长时间才能执行。我已经读过当前(我正在使用GWT 2.5.1),String.split方法非常有问题,有时几乎比JSNI方法执行x1000倍;所以我采取了这种方法。

我正在使用的JSNI方法如下(我从同一网站上获取):

public static final native String[] split(String string, String separator) /*-{
   return string.split(separator);
   }-*/;

但是现在,我收到了这个错误:

java.lang.ClassCastException:com.google.gwt.core.client.JavaScriptObject $无法转换为[Ljava.lang.String;

即使我在末尾写了一个.toString(),错误也会变成以下内容:

java.lang.ClassCastException:java.lang.String无法强制转换为[Ljava.lang.String;

我这样称呼这个方法:

String[] temp = split(str, "::");

为了从临时内部分割得到结果,供以后使用。

str是一个包含iterator.next()的String。

你能否告诉我我可能会遗失或误解?

提前感谢您的时间,

亲切的问候,

2 个答案:

答案 0 :(得分:1)

JavaScript列表不是 Java数组。虽然GWT使用JavaScript列表来模拟Java数组,但这并不意味着它们是相同的。

相反,你应该从你的方法返回JsArrayString,并以这种方式使用它,或者只使用返回真正Java数组的Java版本的String.split。

答案 1 :(得分:0)

感谢你的回应,Colin Alworth。

有了你的答案,我所做的就是以下内容:

public static final native JsArrayString split(String string, String separator) /*-{
    return string.split(separator);
    }-*/;

在java代码中:

JsArrayString temp = split(str, "::");

String agentCode = temp.get(1); (an so forth).

非常感谢你的帮助,它就像一个魅力:)。