簡単に入手できます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
}
}
できません:class
ファイルにコメントが含まれていません。
「解決策」は、プログラムを構築するときにjavadocをHTMLとして生成し、クラスの名前とメソッドの名前からURLを構築することです。 doclet API を使用して、HTMLよりも適切な形式でjavadocを生成することもできます。
実行時にそれを取得する唯一の方法は、カスタムアノテーションを使用することです。
カスタムアノテーションクラスを作成します。
@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();
}
}
}
注釈プロセッサは、ソースコードのJavadocコメントにアクセスできます。関心のあるJavadocを持つクラスのコンパイルプロセスを制御できる場合は、アノテーションプロセッサを使用して、コンパイル時にJavadocを取得し、後で実行時に使用できるようにすることができます。
これは、 therapi-runtime-javadoc プロジェクトで使用されるアプローチです(開示:私が作成し、恥知らずにプラグインしています)。
javadocをプログラムで実行 およびオプションを渡して、必要なクラスのドキュメントを生成し、生成されたドキュメントを解析して、必要なメソッドのドキュメントを取得できます。コメントはクラスファイルにないため、実行時にソースコードが必要になります。
コメントはバイトコードで表現されていません。コメントはコンパイラーによって取り除かれ、「実行時」には使用できません。