> When you think about it, other Java APIs (jaxb, jpa, Jackson) do go the 
> extra mile to accommodate Java collections


Well kind of bad comparison right? These Java APIs either 
serialize/deserialize based on a defined principle or stay in Java land 
anyways. 
 

> , and the example above looks like can be exported to js object (could use 
> a helper annotation @JsX or two).


You don't "export" Java to JS but instead you consume JS using Java. That 
means you would need to have a class that implements the Map interface and 
takes a JS map as constructor parameter. Then you can implement the Java 
API on top of the JavaScript API. In some cases you can simply delegate to 
the JS API, in some cases you can't. 

But thats something JsInterop does not do, however nobody stops you from 
having something like 

@JsType(native = true) 
class JsArray<T> {

  // ...get / set / shift / slice / etc...

  @JsOverlay
  Collection<T> asCollection() {
    // Java API on top of JS API
    return new JsArrayCollectionAdapter<>(this);
  }

  @JsOverlay
  List<T> asList() {
    // Java API on top of JS API
    return new JsArrayListAdapter<>(this);
  }
}

@JsType(native = true)
class Something {

  @JsProperty
  JsArray<Person> persons;


  @JsOverlay
  List<Person> getPersons() {
    return persons.asList();
  }

  @JsOverlay
  void setPersons(List<Person> newPersons) {
    // might use ES6 Array.from(newPersons.toArray()) if possible, 
otherwise fallback to manual copying
    persons = JsUtils.asJsArray(newPersons); 
    // alternatively do it through the adapter
    List<Person> adapter = persons.asList();
    adapter.clear();
    adapter.addAll(newPersons);
  }
}


-- J.

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-web-toolkit+unsubscr...@googlegroups.com.
To post to this group, send email to google-web-toolkit@googlegroups.com.
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

Reply via email to