get annotation value?

23,916

Solution 1

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;
}

Solution 2

You can check if annotation belongs to JSonElement if yes you can cast and call your methods

If looping through all the annotation then

for(Annotation annotation : methods[i].getAnnotations()) {
    if(annotation instanceOf(JsonElement)){
       ((JsonElement)annotation).getType();
    }
}

or

JSonElement jSonElement = methods[i].getAnnotations(JSonElement.class);
jSonElement.getType();

Solution 3

JsonElement jsonElement = methods[i].getAnnotation(JsonElement.class);

int type = jsonElement.type();
Share:
23,916
Jono
Author by

Jono

Updated on July 09, 2022

Comments

  • Jono
    Jono almost 2 years

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