我目前正在为Android开发一个库,我想确保某些方法使用我的自定义注释进行注释。具体地,
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MustBeAnnotated {
}
public class Hello {
@MustBeAnnotated
public void doOne() {
System.out.println("doOne()");
}
@MustBeAnnotated
public int doTwo() {
System.out.println("doTwo()");
return 0;
}
}
在纯Java环境中,我能够通过main()
方法验证这些方法,并且我正在使用Google Reflection library。
import org.reflections.Reflections;
import org.reflections.scanners.MethodAnnotationsScanner;
import org.reflections.util.ClasspathHelper;
import org.reflections.util.ConfigurationBuilder;
import java.lang.reflect.Method;
import java.util.Set;
public class Main {
public static void main(String[] args) {
ConfigurationBuilder bd = new ConfigurationBuilder();
bd.setUrls(ClasspathHelper.forPackage("com.greystripe.sdk"));
bd.setScanners(new MethodAnnotationsScanner());
Reflections reflections = new Reflections(bd);
Set<Method> methods = reflections.getMethodsAnnotatedWith(MustBeAnnotated.class);
for (Method m : methods) {
System.out.println(m.getName());
}
}
}
但我不确定如何在Android环境中实现相同的功能,因为没有公开提供此类main()
方法。我唯一能想到的课程是Application
,但作为一个图书馆提供者,我似乎无法触及这门课程。基本上,我只想调用带注释的方法。因此,如果任何开发人员声明没有注释的新方法并调用它(hello.doThree()
),他们将收到运行时异常。
public class Hello {
@MustBeAnnotated
public void doOne() {
System.out.println("doOne()");
}
@MustBeAnnotated
public int doTwo() {
System.out.println("doTwo()");
return 0;
}
/**
* Without annotation, a RuntimeException should be thrown!
*/
public void doThree() {
// ...
}
}
// ....
// ...
Hello hello = new Hello();
// throw Runtime exception because doThree() has no annotation
hello.doThree();
非常感谢任何帮助或建议。