Collections.emptyList().sort() does nothing
Bernd Eckenfels
ecki at zusammenkunft.net
Wed Nov 15 06:04:45 UTC 2017
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-bounces at openjdk.java.net> on behalf of Martin Buchholz <martinrb at 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 <amaembo at 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-
>
More information about the core-libs-dev
mailing list