On Tue, 21 Feb 2023 03:39:46 GMT, Tingjun Yuan <d...@openjdk.org> wrote:

>> Currently, the two subclasses of `java.util.EnumSet` optimize bulk 
>> operations when the argument is also a `EnumSet`, but there is no such 
>> optimization for wrapper sets (returned by `Collections.unmodifiableSet`, 
>> `Collections.synchronizedSet`, etc.) and immutable sets (returned by 
>> `Set.of` methods) of `Enum`s.
>> 
>> This PR introduces optimization classes for these situations.  No public 
>> APIs are changed.
>
> Tingjun Yuan has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Set.copyOf: need defensive copy

The `RandomAccess` `SortedSet` `NaviagableSet` implementations are public to 
users while `RegularEnumSetCompatible` and `JumboEnumSetCompatible` aren't. So 
I guess we can implement another interface for these wrappers to retrieve their 
backing instances, like:

interface WrapperCollection {
  Collection<?> getBacking();
}

and thus:

interface RegularEnumSetCompatible {
  static RegularEnumSetCompatible tryConvert(Collection<?> coll) {
    if (coll instanceof RegularEnumSetCompatible compat) return compat;
    if (coll instanceof WrapperCollection wrap) return 
tryConvert(wrap.getBacking());
    return null;
  }
}


Adding extra `getClass() == UnmodifiableRegularEnumSet.class` indeed will 
affect most users, which rarely are enum set compatibles.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/12498#issuecomment-1478689026

Reply via email to