Problems with ElementType.TYPE_USE and reflection
Joseph D. Darcy
joe.darcy at oracle.com
Wed Nov 7 00:10:06 UTC 2018
Hello,
To get the type annotations on a field you would have to use
field.getAnnotatedType().getAnnotations();
See
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/reflect/Field.html#getAnnotatedType()
Calling getAnnotations on a field returns the declaration annotations.
HTH,
-Joe
On 11/6/2018 10:48 AM, Kasper Nielsen wrote:
> Hi,
>
> I'm trying to understand exactly how ElementType.TYPE_USE should work.
>
> I'm asking because the following program only prints that s has one 2
> annotation.
> I believe it should either print 3 or be flagged at compilation time.
>
> public class TestClass {
>
> @X
> @Y
> @Z
> String s;
>
> public static void main(String[] args) throws Exception {
>
> System.out.println(TestClass.class.getDeclaredField("s").getAnnotations().length);
> }
>
> @Retention(RetentionPolicy.RUNTIME)
> @Target(ElementType.TYPE_USE)
> @interface X {}
>
> @Retention(RetentionPolicy.RUNTIME)
> @Target(ElementType.FIELD)
> @interface Y {}
>
> @Retention(RetentionPolicy.RUNTIME)
> @Target({ ElementType.FIELD, ElementType.TYPE_USE })
> @interface Z {}
> }
>
> ElementType.TYPE_USE alone isn't enough for the annotation information to
> be retained at runtime.
>
> /Kasper
More information about the core-libs-dev
mailing list