首页 > 解决方案 > 弃用外部库中的变量@interface

问题描述

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

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

  String name() default "";
}

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

由于这是一个外部库,我无法进入界面并简单地弃用它。扩展它、实现它或试图覆盖它也没有被证明是富有成效的。

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

标签: javaannotations

解决方案


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

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

启用外部注释功能后,导航到您的FindBy注释,然后在目标方法上,打开快速操作弹出窗口

在此处输入图像描述

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

在此处输入图像描述

选择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>

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

在此处输入图像描述

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


Eclipse 有一个类似的特性,您也许可以利用它。
这里。我从未尝试过,因为我不再使用 Eclipse。


推荐阅读