gpt4 book ai didi

java - 如何通过反射获取函数的java类型注释

转载 作者:行者123 更新时间:2023-12-02 01:05:30 25 4
gpt4 key购买 nike

根据 JSR 308(Java 类型注释),可以使用 ElementType.TYPE_USE 注释任何类型:

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.*;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

@Target({ TYPE_USE })
@Retention(RUNTIME)
public @interface MyAnnotation {
String value();
}

如何在运行时从函数中获取带注释的值?

import java.util.function.Consumer;

import org.junit.Assert;
import org.junit.Test;

public class TestFunctionAnnotation {
@Test
public void test() {
Consumer<TestFunctionAnnotation> fun = @MyAnnotation("NoJoke") TestFunctionAnnotation::test;
Assert.assertEquals("NoJoke", fun.getClass().getAnnotatedSuperclass().getAnnotation(MyAnnotation.class));
// expected:<NoJoke> but was:<null>
}
}

最佳答案

您的@MyAnnotation不会出现在类或方法上,而是出现在类型的使用上 - 这是您无法反射(reflection)的。相反,您需要一个假设的“反射”来检查代码本身,而不仅仅是类型的结构。

相反,您想要构建一个可以读取该内容的编译器插件,或者在注释处理器内添加任务监听器 - 请参阅 https://stackoverflow.com/a/55288602/860630对此进行一些讨论。完成此操作并可以读取注释后,您就可以生成新代码,然后可以在运行时访问该代码,并执行您在此处执行的任何操作。

关于java - 如何通过反射获取函数的java类型注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60098325/

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