在Java中可以从注释中找到方法吗? 例如:
@Named("Qty")
public getQty()
{
return _quantity;
}
@Named("Qty")
public void setQty(long qty)
{
_quantity = qty;
}
我知道两者都注释为“Qty”,如何在运行时检索setter方法?
答案 0 :(得分:0)
使用参数@Named
查找使用Qty
注释的所有方法,然后查找名为getQty
的方法,或者从带注释的方法列表中检查getter前缀。< / p>
答案 1 :(得分:0)
首先在类getDeclaredMethods上使用它是昂贵的,因为方法得到它的命名注释,然后检查方法名称“get [A-Z]”或“是[A-Z]”。更好地以其他方式解决问题。
答案 2 :(得分:0)
您可以使用反射。
使用Class和Method迭代这些方法。使用getAnnotation方法确定方法是否具有注释。
Named attr = method . getAnnotation ( Named . class ) ;
if ( ( attr != null ) && ( attr . value == "Qty" ) ) ...
答案 3 :(得分:0)
使用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反射很容易得到setter方法,虽然Reflection也可以帮助你:
import static org.reflections.ReflectionsUtils.*;
Set<Method> setterMethods = getAll(methods, withPrefix("set"));