【问题标题】:GWT JSNI split method bugGWT JSNI 拆分方法错误
【发布时间】:2013-11-26 23:40:24
【问题描述】:

我正在开发一个 GWT 应用程序,并且我正在获取一个包含选择查询结果的列表。此选择查询有行。每一行,每个元素与前一个和下一个元素之间用“::”分隔。

我正在尝试使用 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, "::");

为了得到temp里面的split结果,以备后用。

str 它是一个包含 iterator.next() 的字符串。

你能告诉我我可能遗漏了什么或误解了什么吗?

提前感谢您的宝贵时间,

亲切的问候,

【问题讨论】:

    标签: java string gwt jsni


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      感谢您的回复,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).
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多