为什么java.lang.Character
中的isJavaLetterOrDigit
方法被弃用?
文档说应该使用isJavaIdentifierPart
方法,但没有说明原因。这两种方法的文档在其他方面是相同的。在谷歌上搜索这个话题并没有找到任何解释。
事实上,源代码搜索显示,如今,一方只调用另一方,因此行为没有区别。它只是因为它有一个更容易混淆的名字而被弃用吗?这似乎是一个相当奇怪的决定。
@Deprecated
public static boolean isJavaLetterOrDigit(char ch) {
return isJavaIdentifierPart(ch);
}
发布于 2013-04-28 10:49:32
旧的(不推荐使用的)名称不能正确反映实现的实际功能;例如,它接受既不是字母也不是数字的字符。我想这会导致一些"bug“报告和来自困惑的开发人员的支持请求。IMO,这可能是他们采取(重要)步骤创建新方法并弃用旧方法的原因。
( @HuiZheng提出的其他原因在智力层面上是有效的,但不足以证明弃用一种方法。Java人员不会纯粹基于良好的API设计原则来更改API。弃用方法为开发人员提供了工作,Oracle不想疏远那些为这些程序员支付工资的公司。Java在企业世界中获得了如此多的吸引力,因为它是一个稳定的平台!)
无论如何,(在我看来)弃用这个方法似乎是一个显而易见的、明智的API设计决策,它是基于正确的理由做出的。无论哪种方式,我们的观点都没有实际意义。
发布于 2013-04-28 11:08:22
原因1:
一个好的API名称应该足够抽象(但不要太抽象)。isJavaLetterOrDigit
过于面向实现。如果这是你真正想要的,那就改用isLetterOrDigit
吧。
原因2:
一个好的API名称应该准确地指定其用途,并且应该正确实现。isJavaLetterOrDigit
用词不当,因为它实际上允许非字母或数字字符,如"_“或"$”。
原因3:
一个好的API名称应该与其他名称和谐一致。isJavaIdentifierPart
与isJavaIdentifierStart
、isUnicodeIdentifierPart
、isIdentifierIgnorable
等其他接口一致。
最后,仅仅因为这两个API在行为上没有区别并不意味着它们是相同的。误导性的API名称毒害了您的代码。此外,务必尽快转储已弃用的API,因为它们最终(或极有可能)会被库提供商转储。
https://stackoverflow.com/questions/16258997
复制相似问题