30

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

JavaDoc

次の例として

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

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

}

メインメソッドを持つクラス

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
    }
}
4

5 に答える 5

26

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

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

@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();
    }
  }
}
于 2014-02-19T18:51:13.310 に答える
14

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

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

于 2013-03-09T15:14:33.847 に答える
12

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

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

于 2017-08-25T18:17:07.277 に答える
4

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

于 2013-03-09T15:33:13.653 に答える
2

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

于 2013-03-09T15:16:15.547 に答える