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

Reply via email to