arrays and raw types in 18.2.3

Stephan Herrmann stephan.herrmann at berlin.de
Tue Oct 8 13:06:01 PDT 2013


Maybe I'm slow today but the following phrase doesn't speak to me:

18.2.3
  o If T is an array type, T'[], then let S'[] be the most specific array type that is a supertype of S (or S itself)

What reasons exist why S'[] would be different from S?
If S is an array type, then S'[] = S.
If S is not an array type,
how can S have an array type as a supertype?



Secondly, how should this constraint be reduced:
   C <: C<α>
According to 18.2.3 I need a parameterization of C
that is a supertype of C (raw).
Since no such supertype exists,
some invocations of generic methods with raw arguments
seem to be illegal now, which were legal in Java 7.

I'm currently looking at this test:

public class X {
   public static void main(String[] args) {
     EntityKey entityKey = null;
     new EntityCondenser().condense(entityKey);
   }
   public static class EntityCondenser {
     <I, E extends EntityType<I, E, K>, K extends EntityKey<I>> void condense(K entityKey) {
     }
   }
   public class EntityKey<I> {}
   public interface EntityType<
     I,
     E extends EntityType<I, E, K>,
     K extends EntityKey<I>> {
   }
}

With my current understanding of 18.2.3 we cannot find
a valid instantiation for K given the argument of raw type EntityKey.
Even seeing sect. 18.5.5 (Unchecked Conversion Inference)
I don't see how this how this can be leveraged from 18.2.3.

thanks,
Stephan


More information about the lambda-spec-experts mailing list