2012-06-11 64 views
2

一個例子類Exam有一些方法有註釋。如何獲得具有註釋的方法名稱?

@Override 
public void add() { 
    int c=12; 
} 

我怎樣才能獲得方法名稱(添加)已@Override註釋使用org.eclipse.jdt.core.IAnnotation

+0

真的有必要使用'org.eclipse.jdt.core.IAnnotation'嗎? –

+0

只是爲了澄清,你是否正在創建一個使用JDT片斷的eclipse插件? –

+0

沒有必要使用org.eclipse.jdt.core.IAnnotation。 – Anu

回答

5

IAnnotation是強烈的誤導,請參閱文檔。

從類中檢索具有某些註釋的方法。要做到這一點,你必須遍歷所有的方法,並只產生那些有這樣的註釋。

public static Collection<Method> methodWithAnnotation(Class<?> classType, Class<? extends Annotation> annotationClass) { 

    if(classType == null) throw new NullPointerException("classType must not be null"); 

    if(annotationClass== null) throw new NullPointerException("annotationClass must not be null"); 

    Collection<Method> result = new ArrayList<Method>(); 
    for(Method method : classType.getMethods()) { 
    if(method.isAnnotationPresent(annotationClass)) { 
     result.add(method); 
    } 
    } 
    return result; 
} 
+0

謝謝................ – Anu

5

您可以在運行時使用反射。

public class FindOverrides { 
    public static void main(String[] args) throws Exception { 
     for (Method m : Exam.class.getMethods()) { 
     if (m.isAnnotationPresent(Override.class)) { 
      System.out.println(m.toString()); 
     } 
     } 
    } 
} 

編輯:爲了在開發時間/設計時間這樣做,你可以使用的方法描述here

1

另一種簡單的解決方案JDT採用AST DOM可以如下:

public boolean visit(SingleMemberAnnotation annotation) { 

    if (annotation.getParent() instanceof MethodDeclaration) { 
     // This is an annotation on a method 
     // Add this method declaration to some list 
    } 
} 

您還需要訪問NormalAnnotationMarkerAnnotation節點。

相關問題