2012-03-12 44 views
0

在Java中可以從其註釋中找到方法嗎? 例如:從註釋中查找方法

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

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

我知道,無論是標註爲「數量」,怎麼可以檢索例如在運行時的setter方法?

回答

0

查找所有使用@Named註釋的方法與參數Qty,然後查找名爲getQty的方法,或從註釋方法列表中檢查getter前綴。

+0

就像喬普所說的那樣,這是相當昂貴的。你有任何替代實施?它可能不一定是基於反思的。 – delita 2012-03-12 02:37:05

+0

如果您需要根據註釋參數查找方法,則看不到您的選項。你可以註釋屬性,避免對於本質上是相同的事物有兩個註釋。 – 2012-03-12 02:40:25

0

這是昂貴的,首先在類getDeclaredMethods上使用,爲方法獲取其命名註釋,然後檢查方法名稱爲「get [A-Z]」或「is [A-Z]」。最好以其他方式解決問題。

+0

我很樂意提供建議。這個想法是關於「數量」的關鍵字,我想輕鬆地回收吸氣劑和二道回收器。我聽說過一些叫做java bean的屬性,你認爲這可以提供什麼幫助? – delita 2012-03-12 02:38:17

+0

你可以看看JPA,像** eclipseLink **,http://www.vogella.de/articles/JavaPersistenceAPI/article.html。從數據庫到Java類的O/R映射是唯一可比較的應用程序。這在Java bean屬性的類別中有所不同。 – 2012-03-12 02:55:46

0

您可以使用反射。

使用ClassMethod來遍歷這些方法。使用getAnnotation方法來確定方法是否具有註釋。

Named attr = method . getAnnotation (Named . class) ; 
if ((attr != null) && (attr . value == "Qty")) ... 
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方法,但反思還可以幫助你在這裏:

import static org.reflections.ReflectionsUtils.*; 
Set<Method> setterMethods = getAll(methods, withPrefix("set"));