I would however vote for allowing an empty list to be sorted. This is such a common case to return a replacement empty list that it will not only introduce changed behavior but also forces ugly code.
For singleton list I can kind of understand that you want to fail early, but it could be made the same argument as for the empty case. In the end, if we allow one or both, it requires to be spelled out explicitely (unfortunately a spec change, even when it is the more likely usage already) Gruss Bernd -- http://bernd.eckenfels.net ________________________________ From: core-libs-dev <core-libs-dev-boun...@openjdk.java.net> on behalf of Martin Buchholz <marti...@google.com> Sent: Wednesday, November 15, 2017 5:10:06 AM To: Tagir Valeev Cc: core-libs-dev Subject: Re: Collections.emptyList().sort() does nothing Different maintainers of the core library differed on whether it's important to pedantically check for such corner case mistakes. Recently the trend has been to check for all errors up front, even if it ends up making no difference. Users should not depend on the library implementer's mood or vigilance, unless they're professional testers. On Tue, Nov 14, 2017 at 7:52 PM, Tagir Valeev <amae...@gmail.com> wrote: > Hello! > > According to `List.sort` specification [1] "This list must be modifiable". > According to `Collections.emptyList` specification [2] "Returns an > empty list (immutable)." > > So I assume that `List.sort` cannot be called on > `Collections.emptyList` result. However in fact this call is allowed > doing nothing. Is this behavior documented somehow? Can I rely that it > will not change in future Java updates? > > It's even more strange with `Collections.singletonList` [3] which > "Returns an immutable list containing only the specified object". > Obviously I cannot do: > > List<String> list = Collections.singletonList("foo"); > ListIterator<String> it = list.listIterator(); > it.next(); > it.set("bar"); // UOE > > However list.sort(null) works perfectly. On the other hand [1] clearly > says: > > Throws: UnsupportedOperationException - if the list's list-iterator > does not support the set operation. > > To me it seems that emptyList and (especially) singletonList > implementation does not follow the specification. Am I missing > something? > > With best regards, > Tagir Valeev. > > [1] https://docs.oracle.com/javase/9/docs/api/java/util/ > List.html#sort-java.util.Comparator- > [2] https://docs.oracle.com/javase/9/docs/api/java/util/ > Collections.html#emptyList-- > [3] https://docs.oracle.com/javase/9/docs/api/java/util/Collections.html# > singletonList-T- >