创建自定义注释作为Framework-Annotation的别名?

时间:2015-06-12 23:16:27

标签: java annotations

是否可以创建要使用的自定义Alias-Annotation而不是

@SuppressWarnings("unused") // EventBus
public void onEvent(SomeMessage msg) { ... }

@EventBusListener
public void onEvent(SomeMessage msg) { ... }

这将更加自我记录,当然应该包括SuppressWarnings ...... 对不起,如果这个微不足道,但我的谷歌搜索到目前为止失败了。

2 个答案:

答案 0 :(得分:1)

一种方法是编写一个转换AST(编译器的源代码内部表示)的注释处理器。每次出现@EventBusListener时,注释处理器都会插入@SuppressWarnings("unused")的出现位置。编译器的后期阶段会看到注释。

注释处理器通常不会更改源代码,因此这需要一些工作。 AST作为接口类型提供给注释处理器,因此注释处理器需要将其转换为具体类并对具体类执行副作用。 Project Lombok是在编译期间修改AST的注释处理示例。

但您可能只想编写@SuppressWarnings("unused")注释。

答案 1 :(得分:1)

您可以按照以下方式实施:

@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.CONSTRUCTOR, ElementType.LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
@SuppressWarnings("unused")
public @interface EventBusListener{
    @AliasFor(annotation = SuppressWarnings.class, attribute = "value") String[] value() default {"unused"};
}