在外部库@interface中弃用变量

时间:2019-04-08 15:25:59

标签: java annotations

假设我在项目中实现了一个外部库,并在其中使用了注释接口,即FindBy

@Target({ElementType.FIELD, ElementType.TYPE})
public @interface FindBy {
  String id() default "";

  String name() default "";
}

假设我要@Deprecate String name()变量。

由于这是一个外部库,因此我无法进入接口并仅弃用它。扩展它,实现它或尝试覆盖它都没有被证明是有成果的。

在外部接口中弃用此变量的最佳实践是什么?

1 个答案:

答案 0 :(得分:2)

没有Java的方式可以做到这一点。至少,如果不想避免重新打包库,则不是。
但是,您可以利用IDE。例如,使用IntelliJ IDEA,您可以使用外部注释

这意味着每个包都维护一个annotation.xml文件,以包含有关类,方法,字段等的所有所需注释。

启用External annotation功能后,导航至FindBy批注,然后在目标方法上打开快速操作弹出窗口

enter image description here

然后选择“ 注释方法... ”。将会出现另一个弹出窗口

enter image description here

选择 java.lang.Deprecated
此时,已创建一个annotation.xml文件,其内容类似于

<root>
    <item name='com.fasterxml.jackson.databind.annotation.JsonSerialize java.lang.Class&lt;? extends com.fasterxml.jackson.databind.JsonSerializer&gt; using()'>
        <annotation name='java.lang.Deprecated' />
    </item>
</root>

我的示例是在Jackson JsonSerialize#using注释的字段上完成的。
在用法上,您现在会看到它已删除/已弃用

enter image description here

您现在可以git addgit push这些文件,您团队中的每个人都将看到该字段的弃用。


Eclipse具有类似的功能,您也许可以利用它。
参见here。我从未尝试过,因为我不再使用Eclipse。