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";
    }

}

我们的类有一个 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
    }
}
4

5 回答 5

26

The only way to get it at runtime is to use custom annotations.

Create a custom annotation class:

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

Use it on a method of a class, e.g.:

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

Inspect the annotations via reflection:

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 回答