On Apr 17, 2013, at 6:11 PM, Zhong Yu <zhong.j...@gmail.com> wrote: > On Wed, Apr 17, 2013 at 4:53 PM, Martin Buchholz <marti...@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