Static methods on Stream and friends

Brian Goetz brian.goetz at oracle.com
Sun Apr 21 11:35:32 PDT 2013


Two things here:

1.  Tim may be suggesting to go further and rename "Stream.empty" to 
"Stream.of()"?

2.  Query about method selection.

Method selection proceeds in three phases (see JLS 7/e 15.12.2):

   1.  no boxing or unboxing
   2.  with boxing/unboxing, but no varargs
   3.  with varargs.

So, Stream.of(T) will be considered before Stream.of(T...) is -- even 
for boxed streams like Stream<Integer>.  So I believe there is no need 
to extend the variable arity signature to of(T, T, T...).

On 4/21/2013 2:30 PM, Tim Peierls wrote:
> On Sun, Apr 21, 2013 at 2:19 PM, Brian Goetz <brian.goetz at oracle.com
> <mailto:brian.goetz at oracle.com>> wrote:
>
>     It was suggested on lambda-dev that we should rename singleton to
>     simply be an overload of "of":
>
>        Stream.of(T)
>        Stream.of(T...)
>
>     which seems reasonable.
>
>
> Aren't there ambiguity problems with that pair of signatures? I would
> have thought something like this:
>
> Stream.of() // for empty
> Stream.of(T) // for singleton
> Stream.of(T, T, T...) // for two or more
>
> --tim


More information about the lambda-libs-spec-observers mailing list