title: What are Reified Generics? How do they solve Type Erasure problems and why can't they be added without major changes?
body: <p>I've read <a href="http://gafter.blogspot.com/2006/11/reified-generics-for-java.html" rel="noreferrer">Neal Gafter's</a> blog on the subject and am still unclear on a number of points.</p>
  
  <p>Why is it not possible to create implementations of the Collections API that preserve type information given the current state of Java, the JVM and existing collections API? Couldn't these replace the existing implementations in a future version of Java in a way where backwards compatibility is preserved?</p>
  
  <p>As an example:</p>
  
  <pre><code>List&lt;T&gt; list = REIList&lt;T&gt;(T.Class);
  </code></pre>
  
  <p>Where REIList is something like this:</p>
  
  <pre><code>public REIList&lt;T&gt;() implements List {
    private Object o;
    private Class klass;
  
    public REIList(Object o) {
      this.o = o;
      klass = o.getClass();
    }
  ... the rest of the list implementation ...
  </code></pre>
  
  <p>And the methods use Object o and Class klass to get the type information.</p>
  
  <p>Why would preserving generic class information require language changes rather than just a JVM implementation change? </p>
  
  <p>What am I not understanding?</p>