Thanks guys...

You're right Class<T> wasn't the right way to go here, Type is correct.

Cheers


On Wed, Jun 15, 2011 at 1:32 PM, Russ Milliken <[email protected]>wrote:

> Right, you don't want to use Class<T> as a parameter because it's difficult
> to get at that "T" at runtime.
>
> Can you use Guice's TypeLiteral class instead?  This class provides easy
> runtime access to the generic parameters.
>
> -Russ
>
>
> On Tue, Jun 14, 2011 at 10:58 PM, Alexandre Walter Pretyman <
> [email protected]> wrote:
>
>> 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.
>>
>>
>  --
> 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.
>

-- 
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.

Reply via email to