已弃用的API和旧的API之间的区别?
我正在研究Java中的旧版API,Collection
Framework并了解到诸如和Vector
和的类HashTable
已被ArrayList
和取代HashMap
。
但是,仍旧不建议弃用它们,并且从本质上讲,弃用应用于已被取代且应避免的软件功能,因此,我不确定何时何时弃用API。
回答:
从Sun官方词汇表中:
:指不再推荐的类,接口,构造函数,方法或字段,并且在以后的版本中可能不再存在。
从何时弃用指南:
您可能已经听说过“自嘲的幽默”一词,或使演讲者的重要性降至最低的幽默。弃用的类或方法就是这样。它不再重要。实际上,它是如此不重要,以致您不再应该使用它,因为它已被取代,并且将来可能不再存在。
该@Deprecated
注释进一步进了一步和危险警告:
注释的程序元素
@Deprecated
是不鼓励程序员使用的元素,通常是因为这样做很 危险 ,或者因为存在更好的替代方法。
参考文献
- java.sun.com词汇表
- 语言指南/如何以及何时弃用API
- 注释类型弃用的API
请注意,官方词汇表并未定义“传统”的含义。很有可能是乔什·布洛赫(Josh
Bloch)使用的一个术语,没有确切的定义。但是,这意味着总是不要在新代码中使用遗留类,并且存在更好的替代方法。
也许使用旧版但未弃用的类的旧代码不需要任何操作,因为至少到目前为止,它们没有停止存在于未来版本中的危险。
相反,弃用则明确警告它们可能不再存在,因此应采取措施迁移到替代产品。
有效Java 2nd Edition的报价
为了比较这些术语在上下文中的使用方式,以下是这些书中引用 “不赞成使用” 一词的引文:
:声称保证终结的唯一方法是
System.runFinalizersOnExit
及其邪恶的孪生兄弟Runtime.runFinalizersOnExit
。这些方法存在致命缺陷,已被弃用。:库提供了该
Thread.stop
方法,但是很久以前不赞成使用此方法,因为它本质上是 不安全的-使用该方法可能会导致数据损坏。
:该
System.runFinalizersOnExit
方法是线程恶意的,已被弃用。:它们使您可以一次将某些
Thread
原语应用于一堆线程。这些原语中有几个已被弃用,其余的则很少使用。线程组已过时。
相比之下,这些是出现 “遗留” 一词的引号:
:提供它们是为了与在引入泛型之前的旧代码保持兼容性和互操作性。
:擦除是使泛型类型与不使用泛型的旧代码自由互操作的原因。
:这些包装器对于跟踪谁在混合通用代码和旧代码的应用程序中向集合中添加了错误类型的元素的人很有用。
:它们提供对遗留代码库的访问,而遗留代码库又可以提供对遗留数据的访问。[…]使用本机方法访问遗留代码也是合法的。[…]如果您必须使用本机方法来访问低级资源或旧版库,请使用尽可能少的本机代码并对其进行全面测试。
:虽然您应该始终优先使用并发实用程序,而不是
wait
和notify
,但是您可能必须维护使用wait
和的旧代码notify
。
这些引号不是经过精心选择的:它们都是在书中出现 “已弃用” 和 “旧版” 一词的所有实例。Bloch的信息在这里很清楚:
- 不推荐使用的方法(例如
Thread.stop
)是危险的, 绝对 不要使用。 - 另一方面,例如
wait/notify
可以保留在旧代码中,但不应在新代码中使用。
我自己的主观意见
我的解释是,弃用某些东西就承认这是一个错误,从一开始就没有好处。另一方面,将某事物分类为遗留物就意味着该事物在过去已经足够了,但已经达到了目的,并且对于现在和将来都不再足够。
以上是 已弃用的API和旧的API之间的区别? 的全部内容, 来源链接: utcz.com/qa/417932.html