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.
