Java: как работает Generic Erasure

Scenario A.java--- --------после стирания-------->M.class

Сценарий B.java-----------после стирания-------- >M.class

Тогда почему A является недопустимым, а B допустимым, поскольку после стирания они имеют почти одинаковый M.

Сценарий A до стирания:

 class ArrayList<V> {
 private V[] backingArray;
         public ArrayList() {
             backingArray = new V[DEFAULT_SIZE]; // illegal
           }
 }

Сценарий A после стирания:

 class ArrayList<V> {   
   private Object[] backingArray;   
      public ArrayList() {
      backingArray = new Object[DEFAULT_SIZE]; // this is not useful   
   } 
}

на самом деле Object[Default_Size] полезен ~ Сценарий B до стирания:

class ArrayList<V> {
  private V[] backingArray;
  public ArrayList() {
    backingArray = (V[]) new Object[DEFAULT_SIZE]; 
  }
}

Сценарий B после стирания:

class ArrayList<V> {
  private Object[] backingArray;
  public ArrayList() {
    backingArray = (Object[]) new Object[DEFAULT_SIZE]; 
  }
}
0
задан iamx7777777 24 March 2012 в 20:37
поделиться