3

たとえば、クラスにExamはアノテーションを持ついくつかのメソッドがあります。

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

@Overrideアノテーションを使用してメソッド名(追加)を取得するにはどうすればよいorg.eclipse.jdt.core.IAnnotationですか?

4

3 に答える 3

7

リフレクションを使用して、実行時にこれを行うことができます。

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());
         }
      }
   }
}

編集:開発時/設計時にこれを行うには、ここで説明する方法を使用できます。

于 2012-06-11T12:46:50.843 に答える
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;
}
于 2012-06-11T12:53:15.490 に答える
1

AST DOMを使用する別の単純なJDTソリューションは、次のようになります。

public boolean visit(SingleMemberAnnotation annotation) {

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

NormalAnnotationまた、ノードにアクセスする必要がありますMarkerAnnotation

于 2014-11-11T09:58:57.113 に答える