问题描述
@Deprecated
注释中有一些我无法复制的特殊内容吗?
我需要创建一个类似于@Deprecated
的注释,以在Eclipse中以及在构建时生成警告。当我将方法标记为@Deprecated
时,我会得到很好的警告。例如,如果我有一个旧方法(出于兼容性原因,我可能仍然保留):
@Deprecated
public List<Account> getClientAccounts(final int clientId) {
// Implement search...
}
-
也可以在构建时看到:
[警告] 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中有一个分支。