Final strings in annotations applying to class members
Joel Borggren-Franck
joel.franck at oracle.com
Wed Jan 29 05:34:25 PST 2014
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