Hi Stuart,

Comments:

Set.java:
- of methods: @throws IAE "if the elements are duplicates" -> "if elements *contains *duplicates"

- in the of() methods, would it be more efficient to add the individual object to the hashset w/o
   the intermediate list; don't create garbage that needs to be collected.

EnumSet.java:

 - the javadoc for the of(e) method says it is specified by: "

   |of
   
<http://cr.openjdk.java.net/%7Esmarks/reviews/jep269/specdiff.20151123/java/util/Set.html#of-E->|
 in
   interface |Set
   
<http://cr.openjdk.java.net/%7Esmarks/reviews/jep269/specdiff.20151123/java/util/Set.html><E
   
<http://cr.openjdk.java.net/%7Esmarks/reviews/jep269/specdiff.20151123/java/util/EnumSet.html>
   extends java.lang.Enum<E
   
<http://cr.openjdk.java.net/%7Esmarks/reviews/jep269/specdiff.20151123/java/util/EnumSet.html>>>|"
Must be a javadoc bug because Set is an interface and of is a static method.

   This anomaly incorrectly makes EnumSet show up in the diff.


List.java:
- The use of 'Creates an immutable list...' implies a new List is created each time. (ditto @returns "newly created")
   I would use 'Returns an immutable list...'

- I think I would have gone for 7 or 9 elements in the constructor, the 10 and 11 args forms just look like they would never be used. (your comments not with standing)

- in the implementation, it would helpful to use Objects.requireNonNull(e1, "e1") form to aid in debugging which arg was null. (Ditto Map, and Set)


Map.java:
 - Might want to clarify that the duplicate check uses equals (not ==).
 - Same comments about the description using "creates/created" and "newly".
 - Map is even stranger than List with 20 arguments (10 arg/value pairs)
- Capacity and load factor are not relevant for an immutable Map; can that be noted somewhere? - KeyValueHolder is more general than is needed; it does not need to inherit from Entry and could be a nested class in Map.

$,02, Roger



On 11/24/2015 1:26 AM, Stuart Marks wrote:
Hi all,

Please review these API and implementation changes that comprise the first integration of JEP 269. I intend to push this under the "initial API and skeleton implementation" subtask, JDK-8139232.

Changes since the previous review:
 - more precise wording regarding static factory methods (thanks Remi)
 - add defensive copy and test for List.of(E...) (thanks Michael Hixson)
 - more null checking and tests
 - various small wording cleanups
 - @since 9

I've left the fixed-arg overloads at ten for all three interfaces. The fixed-arg methods provide a useful fast path for initialization and non-desktop, non-server cases. The cost is some API clutter; ten elements or pairs is rather a lot. This number should be sufficient, though, to handle the vast majority of cases without having to switch to varargs. Note that the clutter is only in the API definitions, and it doesn't intrude into the point of call (at least for List and Set). For the Map case, it's particularly useful to have lots of fixed-arg overloads, since the varargs case requires switching APIs and adding more boilerplate.

I've also updated the JEP text to reflect the current proposal, mainly the removal of the static factory methods from the concrete classes.

JEP:

    http://openjdk.java.net/jeps/269

API spec (basically List, Map, and Set):

    http://cr.openjdk.java.net/~smarks/reviews/jep269/api.20151123/

Specdiff:

http://cr.openjdk.java.net/~smarks/reviews/jep269/specdiff.20151123/overview-summary.html

Webrev:

    http://cr.openjdk.java.net/~smarks/reviews/jep269/webrev.20151123/

Thanks,

s'marks

Reply via email to