Quick question...when you say provider, what do you mean exactly? Is
there a specific provider method pattern?

On Jun 29, 7:41 pm, Ricardo Rocha <[email protected]> wrote:
> Hi again.
>
> On Jun 24, 3:16 pm, Thomas Broyer <[email protected]> wrote:
>
> > On 24 juin, 12:01, "[email protected]" <[email protected]>
> > wrote:
>
> > > Hi all.
>
> > > I've been trying to get a nice setup of the best practices presented
> > > at google i/o. I have something working, but a few questions.
>
> > > The first one is how fine-grained do you go for the events you define?
> > > Say i have events for updates in entities A and B in my model:
> > > UpdatedAEvent, UpdatedBEvent. To prevent creating new event classes
> > > for every entity i might add, i liked the idea of usinggenericsafter
> > > looking at the source code of GWT.
>
> > > Classes like:
> > > public class ModelUpdatedEvent<V> extends
> > > GwtEvent<ModelUpdatedHandler<V>> {
> > > ...
> > > private static Type<ModelUpdatedHandler<?>> TYPE;
> > > ...
> > > public static Type<ModelUpdatedHandler<?>> getType() {
> > >   if (TYPE == null) {
> > >     TYPE = new Type<ModelUpdatedHandler<?>>();
> > >   }
> > >   return TYPE;}
>
> > I'd rather write:
> > @SuppressWarning("unchecked")
> > public static <V> Type<ModelUpdatedHandler<V>> getType() {
> >    return TYPE;
>
> > }
>
> > (TYPE might have to be of type Type<?>)
>
> > (Given that you most probably won't use ModelUpdatedEvent without its
> > TYPE, you can just initialize it in the declaration, like GWT does,
> > and have getType() just "return TYPE")
>
> > > But then i guess i can't use them with an event bus (the
> > > HandlerManager)? I lack complete understand ofgenericsand wildcards,
> > > but assuming the class doesn't know the type, this won't work right?
>
> > Even if the class did use "V", it wouldn't work, becausegenericsin
> > Java are hardly more than just syntactic sugar (google for 
> > "javagenericserasure").
>
> > > eventBus.addHandler(ModelUpdatedEvent.getType(), ...)
>
> > However you write ModelUpdatedEvent/ModelUpdatedHandler, you'd end up
> > having all your handlers receive all ModelUpdatedEvent<?> events.
>
> > The only way you could make this work is having a getType(Class<?>
> > cls) returning a different Type<ModelUpdatedHandler<?>> instance for
> > each class given as argument:
>
> > public static <V> Type<ModelUpdatedHandler<V>> getType(Class<V> cls) {
> >    // do your magic here}
>
> > ...
> > eventBus.addHandler(ModelUpdatedEvent.getType(A.class), ...);
>
> > ...or you could instead have a getTypeForA() and getTypeForB()
> > methods:
> > public static Type<ModelUpdatedHandler<A>> getTypeForA() { return
> > TYPE_A; }
> > public static Type<ModelUpdatedHandler<B>> getTypeForB() { return
> > TYPE_B; }
>
> > ...this wouldn't be that different from having a ModelUpdatedEvent
> > subclass per "model class".
>
> Thanks for your reply. I've done this (multiple subclasses), but was
> looking for a better option.
>
>
>
> > > The second point is regarding dependency injection. I got it working
> > > for things implementing interfaces, to which i bind implementations.
> > > But how do you go for the HandlerManager for example? I've tried
> > > making it a singleton as in:
> > >     protected void configure() {
> > >         ...
> > >         bind(HandlerManager.class).asEagerSingleton();
> > >         ...
>
> > > but i get "No @Inject or default constructor found for class
> > > com.google.gwt.event.shared.HandlerManager".
>
> > > Same if i use .in(Singleton.class). I've seen that GWT should fallback
> > > to GWT.create when there's no injection available, but if i don't
> > > mention the HandlerManager in my injector it also fails.
>
> > ...and GWT.create() expects a default constructor.
>
> > The solution IMO is to use a provider.
>
> Provider it was (as in provider method), it worked fine.
>
> Thanks again,
> Ricardo
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to