Java获取编译时安全方法名称

在使用reflection类和注释时,我发现没有明确的方法以编译时安全的方式引用方法名称。 我真正想要的是能够引用注释中的方法。 可能看起来像:

@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 loadMethodName(Class mock) { return (T) Proxy.newProxyInstance(mock.getClassLoader(), new Class[] { mock }, (obj, method, args) -> { methodName = method.getName(); return null; }); } public interface IFoo { Object foo(); } 

有没有人有任何想法,评论或解决方案?

我编写了一个可以提供编译安全方法引用的AnnotationProcessor 。 在github上看到它

如果引用的方法不存在,它将给出编译错误。

它在eclipse中工作,看快照。

Eclipse的使用