Comment obtenir un JavaDoc d'une méthode au moment de l'exécution?

, il est facile d'obtenir a method Name de Class au moment de l'exécution
Mais
Comment je peux obtenir un JavaDoc d'une méthode au moment de l'exécution ?

Comme l'exemple suivant

Notre classe qui inclut JavaDoc de notre méthode cible

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

}

Notre classe qui a une méthode principale

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
    }
}
24
demandé sur Yajli Maclo 2013-03-09 19:12:19

5 réponses

Vous ne pouvez pas : le fichier class ne contient pas les commentaires.

Une" solution " serait de générer le javadoc en HTML lorsque vous construisez votre programme et de construire une URL à partir du nom de la classe et du nom de la méthode. Vous pouvez également générer le javadoc dans un format plus approprié que HTML en utilisant l'API doclet .

12
répondu Denys Séguret 2013-03-09 15:14:33

La seule façon de l'obtenir à l'exécution est d'utiliser des annotations.

Créer une classe d'annotation personnalisée:

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

Utiliser sur une méthode d'une classe, par exemple:

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

Inspectez les annotations par réflexion:

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();
    }
  }
}
21
répondu Abhi 2016-02-25 21:30:57

Les processeurs D'Annotation ont accès aux commentaires Javadoc dans le code source. Si vous avez le contrôle sur le processus de compilation pour les classes dont Javadoc vous intéresse, vous pouvez utiliser un processeur d'annotation pour récupérer le Javadoc au moment de la compilation et le rendre disponible plus tard lors de l'exécution.

C'est L'approche utilisée dans le projettherapi-runtime-javadoc (disclosure: que j'ai écrit et que je branche sans vergogne).

5
répondu dnault 2017-08-25 19:10:53

Vous pouvez Exécuter javadoc par programmation et passer des options pour générer de la documentation pour la classe que vous voulez, puis analyser le document généré pour obtenir la documentation de la méthode que vous voulez. Vous aurez besoin du code source à l'exécution car les commentaires ne sont pas dans le fichier de classe.

3
répondu Lie Ryan 2013-03-09 15:33:13

Les commentaires n'ont pas de représentation en bytecode, ils sont supprimés par le compilateur et ne sont pas disponibles "à l'exécution".

2
répondu cara 2013-03-09 15:16:15