为警告创建Java注释-@NonOptimal

问题描述

@Deprecated注释中有一些我无法复制的特殊内容吗?

我需要创建一个类似于@Deprecated的注释,以在Eclipse中以及在构建时生成警告。当我将方法标记@Deprecated时,我会得到很好的警告。例如,如果我有一个方法(出于兼容性原因,我可能仍然保留):

@Deprecated
public List<Account> getClientAccounts(final int clientId) {
  // Implement search...
}
  • 然后,如果我尝试在Eclipse中使用它,我可以看到它的删除线,并且在左侧栏中显示一个黄色图标:

    enter image description here

  • 也可以在构建时看到:

    [警告] 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 {
}

如何创建此注释?

解决方法

我希望我可以扩展“已弃用”,但不能这样做。

在阅读了很多之后,我最终得到了一个丑陋的解决方法。虽然我不喜欢它,但是它能起作用。

我决定用@Deprecated@NonOptimal批注标记坏方法。从概念上讲这是错误的(实际上并未弃用这些方法),但开箱即用的效果很好。无需开发过度使用的Eclipse插件:

  • @Deprecated注释调试开发人员到处(在Eclipse中和在构建时),这是一件好事。

  • @NonOptimal注释提供了有关为什么使用这种不好方法的详细信息。

很难,但是可以。到目前为止,Eclipse还没有提供任何更好的选择。

注意:更糟糕的是,在使用工具链时,NonOptimal注释在Maven中不能很好地工作:警告变为静默,消失,消失……因此,AnnotationProcessors最终还是无用的

,

@TheImpaler这实际上不是您问题的真正答案,但是一段时间前,我在使用Zalando的Problem API时遇到了Google Annotations Library(又称gag)。

该库提供了大量的自定义注释,在某些情况下,可以通过使用ASM和自定义Java代理来检测实际代码。

也许它可以给您一些有关实际问题的想法。

该项目不再维护,但是Github中有一个分支。