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

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

@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();
}

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

最佳答案 我编写了一个可以提供编译安全方法引用的AnnotationProcessor.
See it on github

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

它在eclipse中工作,看快照.

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

点赞