Array covariance and Arrays.copyOf
    Ioi Lam 
    ioi.lam at oracle.com
       
    Fri Dec 14 06:56:01 UTC 2018
    
    
  
Arrays.copyOf is declared to return an Object[], but it will actually 
return a value array if its newType parameter is a value type. Javac 
will insert a checkcast if newType is known, so we're kind of OK:
     V[]doit(Object src[], int len, Class klass) {
returnArrays.copyOf(src, len, V.class);
     }
->
     5: invokestatic  #141    // 
java/util/Arrays.copyOf:([Ljava/lang/Object;ILjava/lang/Class;)[Ljava/lang/Object;
     8: checkcast     #48     // class "[V;"
    11: areturn
However, if newType is not known, the checkcast is not generated:
     Object[] doit(Object src[], int len, Class klass) {
         return Arrays.copyOf(src, len, klass);
     }
->
     5: invokestatic  #141    // 
java/util/Arrays.copyOf:([Ljava/lang/Object;ILjava/lang/Class;)[Ljava/lang/Object;
     8: areturn               // oops!
What's our plan for Arrays.copyOf?
Thanks
- Ioi
    
    
More information about the valhalla-dev
mailing list