grz01 wrote:
Hi again,
Another reflection question...
I can get at the annotations of a class by doing something like:
import java.lang.annotation.Annotation
...
Bean bean = new Bean();
Annotation a = bean.getClass().getAnnotations()[0];
But if the Annotation has parameters, like
@Table(name="FOOBAR")
public class Bean{ ... }
how do I extract the argument here (i e: name = "FOOBAR") ?
Looking at the java.lang.annotation.Annotation class, I dont see any
method for this?
That is because annotations extend the java.lang.annotation.Annotation
interface, and declare by themselves the parameters they accept, in the
form of parameterless methods.
Since your Table annotation accepts a 'name' parameter, it defines at
least a name() method, which probably returns a String.
You need to cast your Annotation object to Table and call this name()
method on it.
You can call the annotationType() method if you're not sure what to cast
your Annotation to. It is also possible to inspect the methods provided
by annotation classes, and to get an annotation's parameters values by
invoking those methods on an Annotation object.
Examples
Annotation a = bean.getClass().getAnnotations()[0];
Table table = (Table)a;
String name = table.name();
System.out.println(name); // Should display FOOBAR
Other example: (couldn't find a better way to ignore equals() and so
methods, really not Google's friend, and curious to learn)
Annotation a = bean.getClass().getAnnotations()[0];
for(Method method : a.getClass().getDeclaredMethods()) {
String paramName = method.getName().intern();
if("equals" != paramName && "hashCode" != paramName &&
"toString" != paramName && "annotationType" != paramName) =
I see, very helpful.