在使用反射类和注解时,我发现没有一种明确的方式可以以编译时安全的方式引用方法名。我真正想要的是能够在注解中引用一个方法。可能看起来像这样:
@CallAfter(method=Foo.class.foo())
void Bar() { ... }
目前只能使用字符串来实现此功能,这不是编译时安全的。这是一个问题,因为它破坏了Java的静态类型。我发现的唯一解决方案就像下面所示。然而,这仍然无法帮助在注释中引用方法。 :(
public static String methodName = null;
public static void main(String[] args) {
// .foo() is compile-time safe
loadMethodName(IFoo.class).foo();
System.out.println(methodName);
}
public static <T> T loadMethodName(Class<T> mock) {
return (T) Proxy.newProxyInstance(mock.getClassLoader(), new Class[] { mock },
(obj, method, args) -> {
methodName = method.getName();
return null;
});
}
public interface IFoo {
Object foo();
}
有人对此有何想法、评论或解决方案吗?