Подтвердить что ты не робот

Как получить JavaDoc метода во время выполнения?

Легко получить a method Name of 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
    }
}
4b9b3361

Ответ 1

Вы не можете: файл class не содержит комментариев.

"Решение" должно состоять в том, чтобы генерировать javadoc как HTML при создании вашей программы и создании URL-адреса из имени класса и имени метода. Вы также можете создать javadoc в более подходящем формате, чем HTML, используя doclet API.

Ответ 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();
    }
  }
}

Ответ 3

Вы можете запускать javadoc программно и передавать параметры для генерации документации для нужного класса и затем анализировать сгенерированный документ, чтобы получить документацию для метод, который вы хотите. Вам потребуется исходный код во время выполнения, потому что комментарии не находятся в файле класса.

Ответ 4

Комментарии не имеют представления в байт-коде, они удаляются компилятором и не доступны "во время выполнения".

Ответ 5

Обработчики аннотаций имеют доступ к комментариям Javadoc в исходном коде. Если у вас есть контроль над процессом компиляции для классов, в которых вас интересует Javadoc, вы можете использовать обработчик аннотации, чтобы захватить Javadoc во время компиляции и сделать его доступным позже во время выполнения.

Это подход, используемый в проекте therapi-runtime-javadoc (раскрытие: которое я автор и бесстыдно подключаю).