web-dev-qa-db-ja.com

実行時にメソッドのJavaDocを取得するにはどうすればよいですか?

簡単に入手できますa method Name実行時のClass
だが
実行時にメソッドのJavaDocを取得するにはどうすればよいですか?

次の例として

ターゲットメソッドのJavaDocを含むクラス

public class MyClass {
    /**
     * 
     * @param x value of ....
     * @return result of ....
     */
    public String myMethod(int x) {
        return "any value";
    }

}

Mainメソッドを持つクラス

public class TestJava {
    public static void main(String[] args) {
        // get Class method Name at run time
        String methodName = MyClass.class.getMethods()[0].getName();
        System.out.println(methodName); // will print myMethod
        // How to  get a JavaDoc of myMethod `method` at run time
        // MyClass.class.getMethods()[0].????
        // expected to print a JavaDoc of myMethod
    }
}
27
ahmednabil88

できません:classファイルにコメントが含まれていません。

「解決策」は、プログラムを構築するときにjavadocをHTMLとして生成し、クラスの名前とメソッドの名前からURLを構築することです。 doclet API を使用して、HTMLよりも適切な形式でjavadocを生成することもできます。

12
Denys Séguret

実行時にそれを取得する唯一の方法は、カスタムアノテーションを使用することです。

カスタムアノテーションクラスを作成します。

@Retention(RUNTIME)
@Target(value = METHOD)
public @interface ServiceDef {
  /**
   * This provides description when generating docs.
   */
  public String desc() default "";
  /**
   * This provides params when generating docs.
   */
  public String[] params();
}

クラスのメソッドで使用します。例:

@ServiceDef(desc = "This is an utility class",
            params = {"name - the name","format - the format"})     
public void read(String name, String format)

リフレクションを介して注釈を検査します。

for (Method method : Sample.class.getMethods()) {
  if (Modifier.isPublic(method.getModifiers())) {
    ServiceDef serviceDef = method.getAnnotation(ServiceDef.class);
    if (serviceDef != null) {
      String[] params = serviceDef.params();
      String descOfMethod = serviceDef.desc();
    }
  }
}
21
Abhi

注釈プロセッサは、ソースコードのJavadocコメントにアクセスできます。関心のあるJavadocを持つクラスのコンパイルプロセスを制御できる場合は、アノテーションプロセッサを使用して、コンパイル時にJavadocを取得し、後で実行時に使用できるようにすることができます。

これは、 therapi-runtime-javadoc プロジェクトで使用されるアプローチです(開示:私が作成し、恥知らずにプラグインしています)。

6
dnault

javadocをプログラムで実行 およびオプションを渡して、必要なクラスのドキュメントを生成し、生成されたドキュメントを解析して、必要なメソッドのドキュメントを取得できます。コメントはクラスファイルにないため、実行時にソースコードが必要になります。

3
Lie Ryan

コメントはバイトコードで表現されていません。コメントはコンパイラーによって取り除かれ、「実行時」には使用できません。

2
cara