Lots of static methods in an interface

Brian Goetz brian.goetz at oracle.com
Tue Sep 10 09:29:59 PDT 2013


> It seems that the standard lib is settling on the convention of

I think "settling" is too strong a statement; more like "experimenting 
to find the right equilibrium in the new world" is more accurate.

> putting static methods directly in the relevant interface, e.g.
> Comparator, instead of in another companion class, e.g. Comparators. I
> was against it before but now I think it is great - no need to direct
> users to another place to look for related methods.

Right.  More generally, there are things to love about this approach (no 
garbage side-classes, fewer "magic" place(s) to look for relevant static 
methods), and things to worry about (messing up the interface with lots 
of methods of varying relevance.)  I think we should embrace both the 
love and the worry.

In reality, I think the two poles -- the "old way" (put everything in a 
side class) and "put everything in the interface" are both probably 
excessive extremes.  The poster child for this tension is Collections; 
do we really want *all* of these methods in Collection?  Some are pretty 
esoteric.

> However I still find the javadoc landing page very messy:
>
> http://download.java.net/jdk8/docs/api/java/util/Comparator.html#method_summary
>
> with static/abstract/default methods mixed together indiscriminately.
> Sure there are tabs, but there is no reason to give a bad first
> impression to users. Static/abstract/default methods are so different,
> does anybody really want an alphabetic index containing all of them?

Agreed.  This was a compromise we made for Java 8.  There are sooo many 
things that need to be improved about Javadoc, that we were wary of 
getting mired; this is what we had the resources to do for now.  Its not 
perfect.



More information about the lambda-dev mailing list