How do you get values set inside a annotation?
I have the following annotation defined:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface JsonElement {
int type();
}
And here is the method that uses it in a POJO class
@JsonElement(type=GETTER_METHOD)
public String getUsername{
........................
}
And the util class that uses reflection to check if this method has the JSonElement annotation present and to check what the type value is.
Method methods[] = classObject.getClass().getDeclaredMethods();
JSONObject jsonObject = new JSONObject();
try {
for (int i = 0; i < methods.length; i++) {
String key = methods[i].getName();
System.out.println(key);
if (methods[i].isAnnotationPresent(JsonElement.class) && key.startsWith(GET_CHAR_SEQUENCE)) {
methods[i].getDeclaredAnnotations();
key = key.replaceFirst(GET_CHAR_SEQUENCE, "");
jsonObject.put(key, methods[i].invoke(classObject));
}
}
return jsonObject;
} catch (Exception e) {
e.printStackTrace();
return null;
}
How do I find out what type() value is? I can find whether the annotation is present, but I can’t find a method that finds out what value – if any – was set for type().
Note that you must be sure that
jsonElemis notnulleither by youror a simple
check.
Additionally, if you changed your annotation to
you wouldn’t have to state the
typeattribute at every occurence of@JsonElementin your code – it would default to-1.You could also consider using an
enumfor this instead of some integer flags, for example: