Monday, October 26, 2015

JsInterop: Casting native javascript objects in gwt

I have a dispatch method, exposed through JsInterop, which can take various kinds of payloads.

Once called from native javascript, I need to cast the payload, but this doesn't quite work as I would like it too.

Here is a simplified example.

public class Dispatcher {
public String dispatch(String action, Payload payload){
return dispatchWithCast(payload);
return "Unknown action: " + action;
public String dispatchWithCast(Payload payload){
ConcretePayload w = (ConcretePayload) payload;

public class Payload {}

public class ConcretePayload extends Payload {
public String foo;
public int bar;

var test = new foo.Dispatcher();
alert("Dispatch: " + test.dispatch("action1", {"foo": "a", "bar": 2})); // Uncaught java.lang.ClassCastException

Everything works just fine if I replace the Payload type in the Dispatcher class with ConcretePayload, and removes the cast.

I guess this this may be beyond the capabilities of the transpiler, I just need to figure out an alternative approach.

Any ideas?

(By the way, I am using the sso linker.)

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
To post to this group, send email to
Visit this group at
For more options, visit

No comments:

Post a Comment