来自 Sun 官方术语表:
弃用:指不再推荐的类、接口、构造函数、方法或字段,并且可能在未来版本中不再存在。
从如何以及何时弃用指南中:
您可能听说过“自嘲式幽默”这个词,或者是贬低说话者重要性的幽默。已弃用的类或方法就是这样。这已经不重要了。事实上,它是如此不重要,您不应该再使用它,因为它已被取代并且将来可能不复存在。
The @Deprecated
注释更进一步并警告危险:
带注释的程序元素@Deprecated
程序员不鼓励使用它,通常是因为它是危险的,或者因为存在更好的替代方案。
参考
- java.sun.com 术语表 http://java.sun.com/docs/glossary.html
- 语言指南/如何以及何时弃用 API http://java.sun.com/j2se/1.5.0/docs/guide/javadoc/deprecation/deprecation.html
- 注释类型 已弃用的 API http://java.sun.com/javase/6/docs/api/java/lang/Deprecated.html
请注意,官方术语表没有定义“遗留”的含义。很可能,它可能是乔什·布洛赫(Josh Bloch)使用的一个术语,但没有确切的定义。然而,这意味着永远不应该在新代码中使用遗留类,并且存在更好的替换。
也许使用遗留但未弃用的类的旧代码不需要采取任何操作,因为至少现在,它们不会面临在未来版本中不再存在的危险。
相反,弃用明确警告它们可能不复存在,因此应采取行动迁移到替代品。
引自《Effective Java》第二版
为了比较这些术语在上下文中的使用方式,这些是书中的引述,其中该词“已弃用”出现:
第 7 项:避免终结器:唯一声称保证最终确定的方法是System.runFinalizersOnExit
和它邪恶的双胞胎Runtime.runFinalizersOnExit
。这些方法存在致命缺陷,已被弃用。
第 66 项:同步对共享可变数据的访问: 图书馆提供Thread.stop
方法,但这个方法很久以前就被弃用了,因为它本质上是unsafe-- 它的使用可能会导致数据损坏。
第 70 项:记录线程安全: The System.runFinalizersOnExit
该方法是线程敌对的,已被弃用。
第 73 项:避免线程组:它们允许您应用某些Thread
一次将原语转换为一堆线程。其中一些原语已被弃用,其余的则很少使用。 [...] 线程组已过时。
相比之下,这些是单词所在的引号"legacy"出现:
第 23 条:不要在新代码中使用原始类型:它们是为了与泛型引入之前的遗留代码兼容和互操作而提供的。
第 25 项:优先使用列表而不是数组:擦除允许泛型类型与不使用泛型的遗留代码自由地互操作。
第 29 项:考虑类型安全的异构容器:这些包装器对于跟踪谁将错误类型的元素添加到混合通用和遗留代码的应用程序中的集合非常有用。
第 54 条:明智地使用本机方法:它们提供对遗留代码库的访问,而这些代码库又可以提供对遗留数据的访问。 [...] 使用本机方法访问遗留代码也是合法的。 [...] 如果必须使用本机方法来访问低级资源或遗留库,请尽可能少地使用本机代码并对其进行彻底测试。
第 69 项:优先选择并发实用程序来等待和通知:虽然您应该始终优先使用并发实用程序wait
and notify
,您可能必须维护使用的遗留代码wait
and notify
.
这些引用没有经过仔细选择:它们都是该词的实例“已弃用” and "legacy"出现在书中。布洛赫的信息在这里很明确:
- 已弃用的方法,例如
Thread.stop
,是危险的,应该never完全被使用。
- 另一方面,例如
wait/notify
可以保留在遗留代码中,但不应在新代码中使用。
我自己的主观看法
我的解释是,贬低某件事就是承认它是一个错误,而且从一开始就不好。另一方面,将某物归类为遗产就是承认它在过去足够好,但它已经达到了其目的,并且对于现在和未来来说不再足够好。