Accessing static members on type variables

Alex Buckley alex.buckley at oracle.com
Fri Apr 4 19:56:44 UTC 2014


Your code said T.FIELD, which is a field access dependent on the members 
of type T. I don't know why you're looking at method invocation.

On 4/4/2014 12:52 PM, Raffaele Sgarro wrote:
> Thanks guys.
>
> Already seen that paragraph of 4.4, and despite the vague warning, I
> assumed it was ok and tried to understand how the call is dispatched. So
> I looked into /"15.12.1. Compile-Time Step 1: Determine Class or
> Interface to Search"/, but:
>
>   *
>
>       If the form is /TypeName/ |.| /[TypeArguments]/ /Identifier/, then
>     the type to search is the type denoted by /TypeName/.
>
>   *
>
>       If the form is /ExpressionName/ |.| /[TypeArguments]/
>     /Identifier/, then the class or interface to search is the declared
>     type T of the variable denoted by /ExpressionName/ if T is a class
>     or interface type, or the upper bound of T if T is a type variable.
>
>   *
>
>       If the form is /Primary/ |.| /[TypeArguments]/ /Identifier/, then
>     let T be the type of the /Primary/ expression. The class or
>     interface to search is T if T is a class or interface type, or the
>     upper bound of T if T is a type variable.
>
>
> I know it's difficult to dig into "Section 6: Names", and that's just
> for curiosity's sake, but it'd be very interesting to know how things go
> on from this point. BTW, I tried javac8, javac7 and JDT, and all three
> exhibit the same behavior.
>
>
> 2014-04-04 20:47 GMT+02:00 Remi Forax <forax at univ-mlv.fr
> <mailto:forax at univ-mlv.fr>>:
>
>     On 04/04/2014 08:20 PM, Alex Buckley wrote:
>
>         Membership of the type variable T is specified by JLS 4.4 and
>         4.9. The members of T are the same as the members of a class QQQ
>         whose direct superclass is Outer. Since QQQ would inherit FIELD
>         from Outer, T has a member FIELD. There is nothing special about
>         FIELD being static.
>
>         Alex
>
>
>     My bad, I've read the email of Raffaele too fast,
>     I was thinking of bug 7022052, see
>     https://bugs.openjdk.java.net/__browse/JDK-7022052
>     <https://bugs.openjdk.java.net/browse/JDK-7022052>
>
>     Anyway, it's quite ugly.
>
>     Rémi
>
>
>
>         On 4/4/2014 12:54 AM, Raffaele Sgarro wrote:
>
>             Consider the following code (ideone <http://ideone.com/GtBQEy>):
>
>             class  Outer{
>                 public  static  final  String  FIELD=  "Success!";
>             }
>
>             class  Test<Textends  Outer>{
>                 public  String  test()  {
>                   return  T.FIELD;
>                 }
>             }
>
>             Does the JSL allow a type variable T to be used to access
>             static members
>             of its upper bound?
>
>
>


More information about the compiler-dev mailing list