2008/6/6 Sebastiaan van Erk <[EMAIL PROTECTED]>: > Martin Funk wrote: > >> Jeremy Thomerson wrote: >> >>> I haven't read the whole thread, but you should be fine as long as your >>> returned page class uses generics... >>> >>> Here's what I use in one app, no warnings, no casts: >>> >>> @Override >>> public Class<? extends Page<?>> getHomePage() { >>> return Home.class; >>> } >>> >>> >>> public class Home extends WebPage<Void> { >>> } >>> >>> >>> >> Hi Jeremy, >> >> I'm still picking on the words. What do you mean by 'uses generics'? >> >> I think the point is class Home has to be a non generic type subclassing >> the generic class WebPage with a concrete type parameter. >> > > Why should the HomePage class be "non generic", and why should you use a > "concrete type parameter"?
I'm not good in explaining why HomePage has to be non generic yet, but there seems to be experimental evidence, see: http://cwiki.apache.org/confluence/display/WICKET/generics#generics-Variationsof%27publicvoidfoo%28Class%3C%3FextendsComponent%3C%3F%3E%3Eclazz%29%27 But the given class Home definitely is not generic! > > Class<? extends Page<?>> means "class of (anything that extends (page of > anything))". I'm not so sure. > > > That means your home page can have as many type parameters as you wish (or > none at all), as long as it extends Page<?>. This also means you you can > define a generic HomePage like this: > > class HomePage<T> extends WebPage<T> { ... } see foo.bar(Component.class); foo.bar(IntegerComponent.class); foo.bar(GenericComponent.class); foo.bar(GenericIntegerComponent.class); in the given example page above. > > > if you feel like it, and don't have to use a concrete type. But if you chose to make class HomePage non-generic you have to decide on a concrete type parameter for WebPage. > > > And I still really don't understand why java has a problem with this: > > class HomePage extends WebPage { ... } > > since here it *is still* the case that HomePage is a subtype of WebPage<?> > (you prove this by the assignment: > > WebPage<?> wp = new HomePage(); > > which works fine). So you would expect to be able to return this in the > getHomePage() method. But you can't because the compiler chokes on it. I > have not seen a convincing reason why this shouldn't work yet, though. Me neither, but we are working on it. Martin > > > Regards, > Sebastiaan > > mf >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >>