Найти метод из аннотации - PullRequest
0 голосов
/ 12 марта 2012

Можно ли в Java найти метод по его аннотациям?Например:

@Named("Qty") 
public getQty()
{
    return _quantity;
}

@Named("Qty")
public void setQty(long qty)
{
    _quantity = qty;
}

Я знаю, что оба помечены как "Qty", как можно получить метод установки, например, во время выполнения?

Ответы [ 4 ]

0 голосов
/ 17 марта 2013

используя библиотеку Reflections , вы можете сделать что-то вроде этого:

Reflections reflections = new Reflections("my.package", new MethodAnnotationsScanner());
Set<Method> namedMethods = reflections.getMethodsAnnotatedWith(Names.class);
//or even
Set<Method> qtyMethods = reflections.getMethodsAnnotatedWith(
        new Named() {
            public String value() { return "Qty"; } 
            public Class<? extends Annotation> annotationType() { return Named.class; }
        });

Затем легко получить только методы установки, используя обычное отражение Java, хотя Reflections также могут помочьВы здесь:

import static org.reflections.ReflectionsUtils.*;
Set<Method> setterMethods = getAll(methods, withPrefix("set"));
0 голосов
/ 12 марта 2012

Это дорогое использование вначале для класса getDeclaredMethods, поскольку метод получает свою именованную аннотацию, а затем проверяет имя метода на «get [AZ]» или «is [AZ]».Лучше решить проблему другим способом.

0 голосов
/ 12 марта 2012

Вы можете использовать отражение.

Использовать Класс и Метод для перебора методов.Используйте метод getAnnotation , чтобы определить, есть ли у метода аннотация.

Named attr = method . getAnnotation ( Named . class ) ;
if ( ( attr != null ) && ( attr . value == "Qty" ) ) ...
0 голосов
/ 12 марта 2012

Найдите все методы, отмеченные @Named с аргументом Qty, затем найдите метод с именем getQty или в списке аннотированных методов проверьте префикс получателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...