ahm*_*l88 27 java oop javadoc runtime
它容易得到a method Name的Class在运行时
BUT
我怎样才能得到一个JavaDoc在运行时的方法吗?
如下例所示
我们的类包括JavaDoc我们的目标方法
public class MyClass {
/**
*
* @param x value of ....
* @return result of ....
*/
public String myMethod(int x) {
return "any value";
}
}
Run Code Online (Sandbox Code Playgroud)
我们的类有一个主要方法
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
}
}
Run Code Online (Sandbox Code Playgroud)
Abh*_*bhi 22
在运行时获取它的唯一方法是使用自定义注释.
创建自定义注释类:
@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();
}
Run Code Online (Sandbox Code Playgroud)
在类的方法上使用它,例如:
@ServiceDef(desc = "This is an utility class",
params = {"name - the name","format - the format"})
public void read(String name, String format)
Run Code Online (Sandbox Code Playgroud)
通过反射检查注释:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Den*_*ret 12
您不能:该class文件不包含注释.
一个"解决方案"是在构建程序时根据HTML生成javadoc,并根据类的名称和方法的名称构建URL.您还可以使用doclet API以比HTML更合适的格式生成javadoc .
注释处理器可以访问源代码中的Javadoc注释.如果您可以控制您感兴趣的Javadoc类的编译过程,则可以使用注释处理器在编译时获取Javadoc,并在运行时稍后使用它.
这是在curei-runtime-javadoc项目中使用的方法(披露:我撰写并无耻地插入).
| 归档时间: |
|
| 查看次数: |
13405 次 |
| 最近记录: |