首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过反射获取函数式的java类型注解

如何通过反射获取函数式的java类型注解
EN

Stack Overflow用户
提问于 2020-02-06 23:22:01
回答 1查看 93关注 0票数 0

根据JSR308 (Java Type注解),可以使用ElementType.TYPE_USE注解任何类型:

代码语言:javascript
复制
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();
}

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

代码语言:javascript
复制
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>
  }
}
EN

回答 1

Stack Overflow用户

发布于 2020-02-07 01:18:54

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

相反,您想要构建一个可以读取它的编译器插件,或者在批注处理器中添加一个任务侦听器-有关这方面的讨论,请参阅https://stackoverflow.com/a/55288602/860630。一旦你做到了这一点并可以阅读注释,你就可以生成新的代码,然后你可以在运行时访问这些代码,并在这里做任何你想做的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60098325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档