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.
*GWT:*
@JsExport
@JsType
@JsNamespace("foo")
public class Dispatcher {
public String dispatch(String action, Payload payload){
if("action1".equals(action))
return dispatchWithCast(payload);
return "Unknown action: " + action;
}
public String dispatchWithCast(Payload payload){
ConcretePayload w = (ConcretePayload) payload;
return w.foo;
}
}
@JsExport
@JsType
public class Payload {}
@JsExport
@JsType
public class ConcretePayload extends Payload {
public String foo;
public int bar;
}
*Javascript:*
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.