Accessing static members on type variables

Raffaele Sgarro raffaelesgarro at gmail.com
Fri Apr 4 19:52:22 UTC 2014


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>:

> 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
>
> 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?
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20140404/58d4a04d/attachment.html>


More information about the compiler-dev mailing list