Casting reference array to any-T array.
Brian Goetz
brian.goetz at oracle.com
Wed Jan 7 21:24:02 UTC 2015
Yes, this is definitely unsound (and probably we should help by failing
at compile time rather than runtime.)
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