I was just looking at Guava's ImmutableList and I noticed that the of() method was overloaded 12 times.
It looks to me that all they needed was:
static <E> ImmutableList<E> of();
static <E> ImmutableList<E> of(E element); // not even necessary
static <E> ImmutableList<E> of(E... elements);
What's the reason for having so many similar variations?