get annotation value?

annotations, java, reflection

Solution

JsonElement jsonElem = methods[i].getAnnotation(JsonElement.class);
int itsTypeIs = jsonElem.type();

Note that you must be sure that `jsonElem` is not `null` either by your

isAnnotationPresent(JsonElement.class)

or a simple

if (jsonElem != null) {
}

check.

Additionally, if you changed your annotation to

public @interface JsonElement {
    int type() default -1;
}

you wouldn't have to state the `type` attribute at every occurence of `@JsonElement` in your code - it would default to `-1`.

You could also consider using an `enum` for this instead of some integer flags, for example:

public enum JsonType {
    GETTER, SETTER, OTHER;
}

public @interface JsonElement {
    JsonType type() default JsonType.OTHER;
}

Problem

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()`.

Original source