gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:19:48 24 4
gpt4 key购买 nike

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

@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 中工作,请看快照。

eclipse-use

关于Java 获取编译时安全的方法名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34121544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com