title: Effective Java By Joshua Bloch: Item1 - Static Factory Method
body: <p>I am reading the <code>Effective Java</code> by Joshua Bloch and I have question about Item1 <code>Static Factory Method</code>. </p>
  
  <p><strong>Quote[Bloch, p.7]</strong></p>
  
  <blockquote>
    <p>Interfaces cant have static methods,
    so by convention, static factory
    methods for an interface named Type
    are put in non-instantiable class
    named Types. For example, the Java
    Collections Framework, provide
    unmodifiable collections, synchronized
    collections, and the like. Nearly all
    of these implementations are export
    via static factory methods in one
    noninstantiable class
    (java.util.Collections). The classes
    of the returned objects are all
    non-public.</p>
  </blockquote>
  
  <p>Ok. When look at the sources code, I see <code>java.util.Collection</code> interface and <code>java.util.Collections</code> class with private constructor (non-instantiable class). and I see that the non-instantiable class Collections has all static methods, just like what Bloch said. But i fail to see the connection between the two classes as Bloch said</p>
  
  <p><strong>Interfaces cant have static methods, so by convention, static factory methods for an interface named Type are put in non-instantiable class named Types.</strong></p>
  
  <ol>
  <li><p>Can anyone point out the obvious to me? </p></li>
  <li><p>what is it mean when he said</p></li>
  </ol>
  
  <p><strong>The classes of the returned objects are all non-public</strong></p>
  
  <p>Here is where I obtain the java sources: <a href="http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Collection.java?av=f">http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Collection.java?av=f</a></p>