2014-04-09 21:01 GMT+02:00 Emmanuel Bernard <emmanuel(a)hibernate.org>:
I always thought that type annotations would allow us to look via
refection to annotations like
public class Foo {
public Set< @NotNull String> names;
}
But looking at some tutorials like
http://jaxenter.com/jsr-308-explained-java-type-annotations-49929.html
it seems that these annotations are only "visible" to a compiler plug-in
/ processor.
Am I right?
No, one can access type annotations at runtime (at least for fields, method
signatures and so on) via reflection. A while ago I feared the same, so I
asked on core-libs-dev [1] and got confirmation that it's possible. That's
how you'd do it:
// given
private List<@NotNull String> names;
Field namesField = ...;
// List<String>
AnnotatedParameterizedType type = (AnnotatedParameterizedType)
namesField.getAnnotatedType();
// String
AnnotatedType typeArg = type.getAnnotatedActualTypeArguments()[0];
// @NotNull
Annotation annotation = typeArg.getAnnotations()[0];
It's one of the planned tasks of the HV GSoC project to make use of this to
support constraints as in your example.
If that turns out true that would suck as it would only be useful to
static tools. I wish I had checked the spec earlier to influence it
:(
Emmanuel
--Gunnar
[1]
http://mail.openjdk.java.net/pipermail/core-libs-dev/2014-March/025732.html
_______________________________________________
hibernate-dev mailing list
hibernate-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev