我正在开发一个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。
你能否告诉我我可能会遗失或误解?
提前感谢您的时间,
亲切的问候,
答案 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).
非常感谢你的帮助,它就像一个魅力:)。