On Tue, Dec 5, 2017 at 1:03 AM, Remi Forax <fo...@univ-mlv.fr> wrote: > Dumping an ArrayList<String> into an array of String is fairly frequent, i > think. > > The main issue with the current API, <T> T[] toArray(T[] array), is that T > can be unrelated to E (the type of the element in the collection) so one can > write > ArrayList<Integer> list = ... > String[] array = list.toArray(new String[0]); > it may even works if the list is empty. > > It's getting worst if E and T can be a primitive type (with valhalla), > because toArray(T[]) as to support all combinations. > > So in my opinion, introducing toArray(generator) is a step in the right > direction.
The signature of the proposed generator is > public <T> T[] toArray(IntFunction<T[]> generator) So I don't think that anything has really changed in this regard; T can still be unrelated to E. That said, sending in a constant String[0] is probably just as good as a generator, or better (in my naive estimation the tradeoff is a >0 comparison versus an interface method dispatch), than an i -> new String[i] unless some kind of benchmark would appear which disproves that hypothesis. -- - DML