On Tuesday, April 27, 2021 11:25 CEST, Peter Levart <peter.lev...@gmail.com> 
wrote:
> Now just some of my thoughts about the proposal:
>
> - SortedSet.addFirst/.addLast - I think an operation that would be used
> in situations like: "I know this element should always be greater than
> any existing element in the set and I will push it to the end which
> should also verify my assumption" is a perfectly valid operation. So 
> those methods throwing IllegalStateException in case the invariant can't
> be kept seem perfectly fine to me.

This was raised before and addressed by Stuart in [0]:
"An alternative as you suggest might be that SortedSet::addFirst/addLast could 
throw
something like IllegalStateException if the element is wrongly positioned.
(Deque::addFirst/addLast will throw ISE if the addition would exceed a capacity
restriction.) This seems error-prone, though, and it's easier to understand and
specify that these methods simply throw UOE unconditionally. If there's a good 
use
case for the alternative I'd be interested in hearing it though."

> - ReversibleCollection.addFirst/.addLast are specified to have void
> return type. This works for List and Deque which always add element and
> so have no information to return. OTOH Collection.add is specified to
> return boolean to indicate whether collection was modified or not, but
> Set modifies the specification of that method a bit to be: return false
> or true when Set already contained an element equal to the parameter or
> not. So ReversibleCollection.addFirst/.addLast could play the same
> trick. for List(s) and Deque(s) it would always return true, but for 
> ReversibleSet(s) it would return true only if the set didn't contain an
> element equal to the parameter, so re-positioning of equal element would
> return false although the collection was modified as a result.

If addFirst/addLast were to return boolean, Deque would no longer compile due 
to its existing methods being incompatible with the new ones.

> Regards, Peter

Kind regards, Anthony

[0] https://mail.openjdk.java.net/pipermail/core-libs-dev/2021-April/076518.html

Reply via email to