簡體   English   中英

Java獲取編譯時安全的方法名稱

[英]Java get compile-time safe method name

在使用反射類和注釋時,我發現沒有明確的方法以編譯時安全的方式引用方法名稱。 我真正想要的是能夠在注釋中引用方法。 可能看起來像:

@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 在github上看到它

如果引用的方法不存在,它將給出編譯錯誤。

它在eclipse中工作,看快照。

Eclipse的使用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM