2

我想将 JRE 提供的某些方法的使用标记为已弃用。我该怎么做呢?

4

7 回答 7

10

你不能。只有您控件内的代码才能@Deprecated添加注释。任何对字节码进行逆向工程的尝试都将导致不可移植的JRE. 这与 Java 的一次编写,随处运行的方法论背道而驰。

于 2013-06-24T17:44:03.033 回答
5

您不能弃用 JRE 方法,但可以向构建系统添加警告甚至编译错误,即使用AspectJ或禁止在 IDE 中使用给定方法。

例如在 Eclipse 中:转到项目属性-->Java 编译器--> 错误警告,然后启用项目特定设置,展开已弃用和重新限制的 API 类别“禁止引用(访问规则)”

显然,您可以检测或覆盖添加@Deprecated注释的类,但这不是一个干净的解决方案。

于 2013-06-24T17:48:59.907 回答
2

将此类限制添加到您的编码指南中,并作为代码审查过程的一部分强制执行。

于 2013-06-24T18:21:15.120 回答
1

在什么情况下?您的意思是您希望能够轻松配置您的 IDE 以禁止使用某些 API?或者您是否试图向世界规定您禁止使用哪些 API?或者你想在运行时做些什么?

如果第一种情况,Eclipse 和我假设其他 IDE,允许您在包或类级别将任何 API 标记为禁止、不鼓励或可访问。

如果你指的是第二个,你当然不能。那将是愚蠢的。

如果您试图禁止在运行时调用某些方法,您可以配置一个安全策略以防止从指定位置加载的代码能够调用与检查的特定方法SecurityManager(如果已安装)。

于 2013-06-24T17:48:32.430 回答
1

只有当且仅当您正在构建自己的 JRE 时,您才能做到这一点!在这种情况下,只需@Deprecated在相应的代码块上方添加!但是,如果您使用的是 Oracle 的 JRE,那么您将无处可去!

于 2013-06-24T17:50:25.417 回答
1

Snihalani:只是为了让我明白这一点......

您想“弃用 JRE 中的方法”以“确保人们从现在开始不再使用 java 的实现并使用我的实现”。?

首先:您不能更改 JRE 中的任何内容,也不允许更改,它是 Oracle 的财产。如果您想解决问题,Uou 可能可以在本地更改某些内容,但这只会在您本地的 JRE 中,而不是可以从 Oracle 网页下载的 JRE 中。

除此之外,没有人拥有您的实现,那么我们将如何使用它呢?Oracle 提供的实现完全符合他们应该做的,当发现缺陷/错误/...时,它将被纠正或替换为新方法(此时原始方法已被弃用)。

但是,最让我担心的是,你会用你想出的东西去改变实现。让我想起了很多网络钓鱼和此类技术,让我们运行您的代码,而不知道它做了什么,甚至不知道我们正在运行您的代码。毕竟,如果您可以访问原始代码并“构建”JRE,那么有什么可以阻止您更改原始方法中的代码呢?

Deprecated 是作者说的一种方式:“是的......我过去这样做过,但似乎该方法存在问题。只是为了不改变使用此方法的现有应用程序的行为,我将不要更改此方法,而是将其标记为已弃用,并添加解决此问题的方法”。

您不是作者,因此您不能决定这些方法是否按应有的方式工作。

于 2013-07-31T07:13:27.020 回答
1

您可以编译您自己的类版本并将其添加到引导类路径或 lib/ext 目录。http://docs.oracle.com/javase/tutorial/ext/basics/install.html 这将更改 JDK 和 JRE。

实际上,您可以将其删除以进行编译,如果使用它,您的程序将无法编译。

于 2013-06-24T18:26:06.410 回答