Final strings in annotations applying to class members
Jonathan Gibbons
jonathan.gibbons at oracle.com
Wed Jan 29 09:07:25 PST 2014
Just checking ...
CONSTR_STR is declared "final String", not "static final String" ...
-- Jon
On 01/29/2014 05:34 AM, Joel Borggren-Franck wrote:
> John, Alex,
>
> Thanks for the bug report. I filed:
>
> https://bugs.openjdk.java.net/browse/JDK-8033132
>
> cheers
> /Joel
>
> On 2014-01-28, Alex Buckley wrote:
>> Looks like a javac bug. The element value CONST_STR is indeed a
>> constant expression (gives the simple name of a constant variable),
>> and the type of CONST_STR is a String, so JLS 9.7.1 says all your
>> annotations are legal.
>>
>> Alex
>>
>> On 1/28/2014 8:14 AM, John Spicer wrote:
>>> Javac 8 accepts:
>>>
>>> @interface Annot {
>>> String str();
>>> }
>>>
>>> class Test {
>>> final String CONST_STR="something";
>>>
>>> @Annot( str = CONST_STR )
>>> class Foo {}
>>>
>>> @Annot( str = CONST_STR )
>>> void f(){}
>>> }
>>>
>>> It rejects only the second annotation use in the example below (complaining that CONST_STR cannot be referenced from a static context).
>>>
>>> Given that CONST_STR is a constant expression, I could see allowing both uses. Is there a rationale for allowing only the use on the class?
>>>
>>> Thanks,
>>>
>>> John.
>>>
>>> @interface Annot {
>>> String str();
>>> }
>>>
>>> class Test {
>>> final String CONST_STR="something";
>>>
>>> @Annot( str = CONST_STR )
>>> static class Foo {}
>>>
>>> @Annot( str = CONST_STR )
>>> static void f(){}
>>> }
>>>
>>>
More information about the compiler-dev
mailing list