Hi, Stuart, happy to help.

I took a look at Groovy and Kotlin. Groovy has reverse() [1] and Kotlin has 
reversed() [2] and asReversed() [3] and reverse() [4]. I’m not quite familiar 
enough with Kotlin to know whether the reversed() method will collide.

[1] 
http://docs.groovy-lang.org/latest/html/groovy-jdk/java/util/List.html#reverse()
[2] 
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/reversed.html
[3] 
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/as-reversed.html
[4] https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/reverse.html

> On Apr 17, 2021, at 2:24 PM, Stuart Marks <stuart.ma...@oracle.com> wrote:
> 
> 
> 
> On 4/16/21 3:06 PM, Donald Raab wrote:
>> We should be cautious when adding new APIs to existing interfaces. There may 
>> be libraries which extend JDK types and already have reversed(), 
>> toReversed() or asReversed() APIs and corresponding interfaces.
>> There are OrderedIterable and ReversibleIterable interfaces and asReversed() 
>> and toReversed() methods in the Eclipse Collections API.
> 
> Hi Don, thanks for looking at the proposal.
> 
> Certainly a lot of care is required when introducing new interfaces, new 
> methods on existing interfaces, and covariant overrides. I believe the 
> primary risks are with name clashes and with return type mismatches.
> 
> On name clashes, "reversed" seems to thread the needle well, as I cannot find 
> any methods with that exact name on Eclipse Collections, Guava, Apache 
> Commons Collections, or several others. There are methods with similar names, 
> of course, such as "reverse", "asReversed", and "toReversed" but they 
> shouldn't cause name conflicts.
> 
> (There might be semantic conflicts, such as creating an reversed copy instead 
> of a reversed view, but I don't think that can be helped.)
> 
> If there are no name clashes with "reversed", the covariant overrides in the 
> sub-interfaces won't a problem. The covariant overrides on existing methods 
> (such as LinkedHashMap.entrySet) are a greater danger, I think. There are a 
> lot of LinkedHashMap subclasses (several dozen are visible in the Yawkat 
> browser) but only one had a conflicting override. It's trivially fixable, but 
> nonetheless it's an incompatibility.
> 
> I'm also concerned about conflicts over the other method names; something 
> like addFirst() is a pretty obvious method to add to a custom List 
> implementation. I haven't seen any, but that doesn't mean there aren't any.
> 
> s'marks

Reply via email to