我想将JRE提供的某些方法的使用标记为已弃用。我该怎么做?
答案 0 :(得分:10)
你做不到。只有控件中的代码才能添加@Deprecated
注释。任何对字节码进行反向工程的尝试都将导致不可移植的JRE
。这与Java的一次编写,随处运行方法论相反。
答案 1 :(得分:5)
您不能弃用JRE方法,但您可以向构建系统添加警告甚至编译错误,即使用AspectJ或禁止在IDE中使用给定方法。
例如在Eclipse中: 转到项目属性 - > Java编译器 - >错误警告,然后启用项目特定设置,展开不推荐使用和重新启动的API类别 “禁止参考(访问规则)”
显然,您可以检测或覆盖添加@Deprecated
注释的类,但这不是一个干净的解决方案。
答案 2 :(得分:2)
在编码指南中添加此类限制,并在代码审核过程中强制执行。
答案 3 :(得分:1)
在什么情况下?您是否希望能够轻松配置IDE以禁止使用某些API?或者您是否试图向全世界指示您禁止的API?或者你想在运行时做点什么?
如果第一种情况,Eclipse和我假设其他IDE,则允许您在包或类级别将任何API标记为禁止,不鼓励或可访问。
如果你的意思是第二个,你当然不能。那太傻了。
如果您尝试禁止在运行时调用某些方法,则可以配置安全策略以防止从指定位置加载的代码能够调用使用SecurityManager
检查的特定方法,如果是安装。
答案 4 :(得分:1)
当且仅当您构建自己的JRE时,您才能做到这一点!在这种情况下,只需在相应的代码块上方添加@Deprecated
!但是,如果您使用的是Oracle的JRE,那么您无需这样做!
答案 5 :(得分:1)
您可以编译自己的类版本并将其添加到引导类路径或lib / ext目录中。 http://docs.oracle.com/javase/tutorial/ext/basics/install.html这将改变JDK和JRE。
实际上,您可以将其删除以进行编译,如果使用它,您的程序将无法编译。
答案 6 :(得分:1)
Snihalani:就这样我直截了当......
你想'弃用JRE中的方法'以'确保人们不使用java的实现并从现在开始使用我的实现。' ?
首先:您无法更改JRE中的任何内容,也不允许更改,这是Oracle的财产。如果你想解决这个问题,你或许可以在本地改变一些东西,但这只会在你的本地JRE中,而不是那些可以从Oracle网页下载的那些。
除此之外,没有人有您的实施,那么我们怎么能够使用它呢? Oracle提供的实现正是他们应该做的,当发现一个缺陷/ bug / ...时,它将被更正或替换为新方法(此时原始方法将被弃用)。
但是,最让我担心的是,你会用你想出的东西来改变实现。提醒我很多网络钓鱼和这样的技术,让我们运行你的代码,而不知道它做什么,甚至不知道我们正在运行你的代码。毕竟,如果您可以访问原始代码并“构建”JRE,那么阻止您更改原始方法中的代码的是什么?
弃用是作者的一种说法: “是的......我过去做过这个,但似乎这个方法存在问题。 为了不使用此方法更改现有应用程序的行为,我不会更改此方法,而是将其标记为已弃用,并添加一个解决此问题的方法“。
您不是作者,因此您无需决定这些方法是否以他们应有的方式运作。