我开始“为了好玩,没人知道,没人在乎”开源项目(
LinkSet).
在一个地方,我需要得到一个注释的方法.
有比这更有效的方式吗?我的意思是没有需要迭代每个方法?
for (final Method method : cls.getDeclaredMethods()) { final HandlerMethod handler = method.getAnnotation(HandlerMethod.class); if (handler != null) { return method; } }
解决方法
看看
Reflections(依赖:
Guava和
Javassist).这是一个已经优化了这一切的图书馆.有一个
Reflections#getMethodsAnnotatedWith()
适合您的功能要求.
这是一个SSCCE,只是copy’n’paste’n’run它.
package com.stackoverflow; import java.lang.reflect.Method; import java.util.Set; import org.reflections.Reflections; import org.reflections.scanners.MethodAnnotationsScanner; import org.reflections.util.ClasspathHelper; import org.reflections.util.ConfigurationBuilder; public class Test { @Deprecated public static void main(String[] args) { Reflections reflections = new Reflections(new ConfigurationBuilder() .setUrls(ClasspathHelper.forPackage("com.stackoverflow")) .setScanners(new MethodAnnotationsScanner())); Set<Method> methods = reflections.getMethodsAnnotatedWith(Deprecated.class); System.out.println(methods); } }