如何获得在运行时方法的JavaDoc的?(How to get a JavaDoc of a met

2019-07-21 06:36发布

它容易得到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
    }
}

Answer 1:

你不能:在class文件不包含的意见。

A“解决方案”将生成javadoc的当你建立你的方案,并从类的名称和方法的名称建立一个URL HTML。 你也可以产生使用比HTML更合适的格式的Javadoc 的doclet API 。



Answer 2:

在运行时获得它的唯一方法是使用自定义的注释。

创建一个自定义的注释类:

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


Answer 3:

注释处理器可以访问的源代码中的Javadoc注释。 如果你有在编译的过程,其Javadoc中你感兴趣的课程的控制,你可以使用注解处理器抢在编译时的Javadoc,并使其以后在运行时可用。

这是使用的方法therapi-运行时的javadoc项目(披露:我撰写和我无耻地堵塞)。



Answer 4:

您可以编程方式运行的Javadoc并通过选项来生成所需的类文档,然后解析生成的文档,以获得您想要的方法的文档。 你需要的源代码在运行时,因为意见是不是在类文件。



Answer 5:

注释不必在字节码的表示,他们得到的编译器剥离出来,并且不可“在运行时”。



文章来源: How to get a JavaDoc of a method at run time?