Casting reference array to any-T array.

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Thu Jan 8 00:00:05 UTC 2015


On 07/01/15 21:24, Brian Goetz wrote:
> Yes, this is definitely unsound (and probably we should help by 
> failing at compile time rather than runtime.)
Yep - this is a javac bug; I'll look into this.

Maurizio
>
> To fix your code, use the "new T[n]" syntax that gives you an array of 
> the erasure of T for ref T and primitive arrays for primitive T (and 
> an unchecked warning.)
>
> On 1/7/2015 4:19 PM, Michael Barker wrote:
>> Hi,
>>
>> A small thing that tripped me up yesterday.  The following code:
>>
>> package github.mikeb01;
>>
>> public class C<any T>
>> {
>>      T[] values;
>>
>>      public C()
>>      {
>>          values = (T[]) new Object[0];
>>      }
>>
>>      public static void main(String[] args)
>>      {
>>          new C<int>();
>>      }
>> }
>>
>> Compiles without error, but fails a runtime with:
>>
>> Specializing github.mikeb01.C${0=I}; searching for 
>> github/mikeb01/C.class
>> (not found)
>> Specializing github.mikeb01.C${0=I}; searching for 
>> github/mikeb01/C.class
>> (found)
>> Exception in thread "main" java.lang.IllegalStateException: [I
>> at
>> valhalla.specializer.SignatureSpecializer.asClassName(SignatureSpecializer.java:79) 
>>
>> at
>> valhalla.specializer.SignatureSpecializer$ForType.getDescAsClassName(SignatureSpecializer.java:156) 
>>
>>
>> Should that be a compile time failure, with an invalid cast from a
>> reference array to any-T array?
>>
>> Mike.
>>




More information about the valhalla-dev mailing list