为什么@deprecated的RetentionPolicy是RUNTIME?

时间:2009-10-24 18:32:07

标签: java annotations

为什么在运行时有兴趣知道方法被弃用的人?有些人可以提供一些例子吗?

6 个答案:

答案 0 :(得分:7)

有一些框架和工具可以实例化对象以使用它们。

例如,许多JavaBean UI编辑器创建bean的实例,并在用户操作他们正在设计的UI时与它们进行交互。

在运行时使用@Deprecated注释允许这样的工具标记用户的弃用方法,事件和属性。

答案 1 :(得分:2)

您假设@deprecated仅对编译阶段(IDE,编译器)感兴趣,但它不是您需要该信息的成像检测方案的延伸。

例如,IDE可以告知您已弃用方法的调用站点数量,但您如何确定应用程序在已弃用方法中花费的时间百分比?

答案 2 :(得分:1)

一个人的运行时间是另一个人的设计时间,例如在编写使用API​​的代码时。

答案 3 :(得分:1)

好问题,我正在努力想出一个令人信服的场景。我所能得到的是,我可以想象一个使用类加载器的应用程序,它不允许使用已弃用的代码。这需要RetentionPolicy.RUNTIME

这就是我所拥有的......

答案 4 :(得分:1)

想到几个实际用途:

使用Velocity,您可以使用自定义Uberspector将Velocity模板的实际调用记录到任何已弃用的方法,然后只需阅读日志即可查看该方法的使用位置,您可以使用并编辑出来。

使用Wicket,您可以拥有一个安全策略,该策略禁止基于.class内容实例化任何类,因此可以创建一个系统来阻止@Deprecated类的实例化。你不是管理员。

答案 5 :(得分:0)

想象一下,您使用不推荐的方法编译MyClass.class。如果您的@Deprecated注释丢失,当您从另一个类调用这些方法时,IDE或编译器无法发出警告。