Hi, I don't think you want to be passing the Class<T> as an argument.
This is what I do, not sure if it is the best way, but works for me.
Instead of passing the Class<T> as an argument, I get it from the
Generic parameters:
boolean isEnhanced =
getClass().getName().contains("EnhancerByGuice");
if (isEnhanced)
{
Class<?> superClass = getClass().getSuperclass();
this.clazz = (Class<T>) ((ParameterizedType)
superClass.getGenericSuperclass()).getActualTypeArguments()[0];
}
else
{
this.clazz = (Class<T>) ((ParameterizedType)
getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
The isEnhanced check is due to that when you use Guice's AOP on your
classes, they get extended with the String "EnhancerByGuice" as part
of the new name.
Sucks having to check it by hand, would be better to have an
injector.isEnhanced(instance) to check if the class is actually
enhanced, but according to
http://code.google.com/p/google-guice/issues/detail?id=187
; we won't be getting that anytime soon...
Regards,
On Jun 7, 3:06 am, ahhughes <[email protected]> wrote:
> Hi All,
>
> This ones a little complex (for me anyway). I have a class that
> requires both a generic argument, and a Class<T> of that generic type
> as a constructor arg.
>
> Easiest to explain with code:
>
> //Supplier, of 'S'.... and it needs Class<S> to do its job
> public abstract class Shop<S> {
> public Shop(Class<S> classOfS){ ... }
>
> }
>
> //FerrariShop is a Shop, but it only supplies Ferrari's...
> public class FerrariShop<F extends AbstractFerrari<?>> extends Shop<F>
> {
> @Inject
> public FerrariShop(Class<F> classOfF, Blah blah){ //Note blah is
> injected too...
> super(classOfF);
> }
>
> }
>
> Then my FastDriver needs to be @Inject'd with a
> 'Provider<FerrariShop<EnzoFerrari>>.....
>
> @Inject
> public FastDriver(Provider<FerrariShop<EnzoFerrari>>
> enzoFerrariShopProvider) {}
>
> I'm a little lost here, so THANKS for helping me if you can :)
>
> p.s. if you are wondering why I am doing this, I am building a
> hierarchy of http requests. Gson is de/serializing the request/
> response and it needs to know Class<F> for its serialization. For
> reliability I want this to be a constructor arg. Also, Gson is
> fantastic (kudos++)!
--
You received this message because you are subscribed to the Google Groups
"google-guice" 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-guice?hl=en.