【发布时间】:2020-08-19 15:07:17
【问题描述】:
@Deprecated 注释有什么特别之处我无法重现吗?
我需要创建一个类似于@Deprecated 的注释以在 Eclipse 中以及在构建时产生警告。当我将方法标记为@Deprecated 时,我会收到很好的警告。例如,如果我有一个旧方法(出于兼容性原因我可能仍然保留):
@Deprecated
public List<Account> getClientAccounts(final int clientId) {
// Implement search...
}
-
然后,如果我尝试在 Eclipse 中使用它,我可以看到它带有删除线,并且左侧栏中有一个黄色图标:
-
在构建时我还可以看到:
[警告] app1/src/test/java/com/app1/MyApp.java:app1/src/test/java/com/app1/MyApp.java 使用或覆盖了已弃用的 API。
现在,根据我无法控制的外部因素(例如,缺少数据库索引),某些方法不是最佳的,我想用我全新的 @NonOptimal 注释清楚地标记它们。我需要增加对问题的可见性。到目前为止,我有:
@Retention(RUNTIME)
@Target(METHOD)
// What else here?
public @interface NonOptimal {
}
如何创建此注释?
【问题讨论】:
-
为了做这样的事情,你需要为编译器创建一个注释处理器,例如cloudogu.com/en/blog/Java-Annotation-Processors_1-Intro
-
@jtahlborn 我正在尝试按照链接中的说明进行操作,但编译器说这些类不是 API 的一部分。我得到:
Access restriction: The method 'JavaCompiler.CompilationTask.call()' is not API (restriction on required library '/apps/jdk-11+28/lib/jrt-fs.jar')。也许这不再适用于 Java 11。 -
我相信这是一个 eclipse 限制。您可能需要更改 eclipse 中的一些设置以允许它构建您的项目:stackoverflow.com/questions/25222811/…
-
@jtahlborn 实际上是个不错的选择。我为 Java 11 实现了它,它在构建过程中运行良好。关于另一边(Eclipse 警告、图标等)你有什么指点吗?
-
对于 Eclipse,两个选项是编写一个 Eclipse 插件,或者运行一个外部构建(即,使用您的注释处理器调用 javac)。前者可以提供更好的 UI 体验,但后者更容易实现,更容易应用于其他 IDE。
标签: java annotations compiler-warnings