2014-05-06 5:06 GMT+02:00 Julien Aymé <julien.a...@gmail.com>: > Hi, > > <snip> > How can the compiler know whether max(1,2,3) is max(a,b,c) or max(a...) ? > </snip> > > max(1,2,3) is compiled to max(a,b,c). The compiler will use the finer > method instead of using the more generic one. > > This is used for example in logging frameworks: > there are multiple methods: > log(String message) > log(String message, Object arg) > log(String message, Object arg1, Object arg2) > log(String message, Object...args) > This is used as an optimization to avoid the cost of creating an array > for each var args call. >
Fine, so do we agree that we change for example public static long max(long[]) to public static long max(long...) while also preserving public static long max(long...) We're not dealing with generic typed arrays and Clirr doesn't show an error, so it seems safe to change this. Benedikt > > My 2 cents, > Julien > > > 2014-05-06 2:21 GMT+04:00 sebb <seb...@gmail.com>: > > On 5 May 2014 22:14, Benedikt Ritter <benerit...@gmail.com> wrote: > >> > >> > >>> Am 05.05.2014 um 22:20 schrieb sebb <seb...@gmail.com>: > >>> > >>>> On 5 May 2014 18:40, Benedikt Ritter <brit...@apache.org> wrote: > >>>> Hi, > >>>> > >>>> we have a pull request at github for [lang] which proposes to > introduce new > >>>> methods in NumberUtils that take varargs as input parameters instead > of > >>>> arrays [1]. I think a better solution would be to change those old > methods > >>>> to use varargs instead of introducing new methods. Since I'm not sure > how > >>>> this affects binary compatibility, I'd like to here what others thing > about > >>>> this. > >>>> > >>>> Clirr doesn't even create an info for a change like this, so I'm > assuming > >>>> it can be changed without affecting clients. > >>> > >>> In most cases, the effect is the same, but there are some edge cases > >>> according to > >>> > >>> > http://stackoverflow.com/questions/5405673/java-varags-method-param-list-vs-array > >>> > >>> However, I don't like the proposed solution which needs new names. > >> > >> Yes, I don't like that either. > >> > >>> One way round this might be to extend the existing methods as follows: > >>> > >>> max(a,b,c,...) > >> > >> This would be a solution. But why not change max(a[]) to max(a...) if > it is binary compartible? > > > > How can the compiler know whether max(1,2,3) is max(a,b,c) or max(a...) ? > > > >> The corner case mentioned in the stackoverflow article seems to be > about generic varargs parameters. > > > > Yes, it does seem to only affect code that would not have compiled > previously. > > > >>> > >>> I think this was already done in some Commons code? > >> > >> I've had a brief look at StringUtils. There were some changes like this > documented by they happend to be implemented in 3.0, so I was unsure :-) > >> > >>> > >>>> Benedikt > >>>> > >>>> > >>>> [1] https://github.com/apache/commons-lang/pull/23 > >>>> > >>>> -- > >>>> http://people.apache.org/~britter/ > >>>> http://www.systemoutprintln.de/ > >>>> http://twitter.com/BenediktRitter > >>>> http://github.com/britter > >>> > >>> --------------------------------------------------------------------- > >>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > >>> For additional commands, e-mail: dev-h...@commons.apache.org > >>> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > >> For additional commands, e-mail: dev-h...@commons.apache.org > >> > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > > For additional commands, e-mail: dev-h...@commons.apache.org > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > For additional commands, e-mail: dev-h...@commons.apache.org > > -- http://people.apache.org/~britter/ http://www.systemoutprintln.de/ http://twitter.com/BenediktRitter http://github.com/britter