Как получить 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
}
}
Ответы
Ответ 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 (раскрытие: которое я автор и бесстыдно подключаю).