Use of super in type parameters

Dan Smith daniel.smith at oracle.com
Thu Apr 18 09:33:08 PDT 2013


On Apr 17, 2013, at 6:11 PM, Zhong Yu <zhong.j.yu at gmail.com> wrote:

> On Wed, Apr 17, 2013 at 4:53 PM, Martin Buchholz <martinrb at google.com> wrote:
>> With the coming of lambda, it is more likely that people will be creating
>> APIs with "not quite correct" generic types, as we are doing in
> 
> I believe that we can tweak generic signatures in APIs without
> breaking calling codes.

It's one thing to make a change that won't break callers.  It's another to make a change that won't break implementers.

>    <S super T> foo(List<S>, List<S>)
> but we declare it today as, regrettably,
>    foo(List<? super T>, List<? super T>)

Unfortunately (without some sort of language change...), neither one of these signatures can be used to override the other.  So if somebody extends my class and overrides my signature, when I change it to the other one later, their code will break.

—Dan


More information about the lambda-dev mailing list