5

为什么不推荐使用该isJavaLetterOrDigit方法java.lang.Character

文档说isJavaIdentifierPart应该使用该方法,但没有说明原因。这两种方法的文档在其他方面是相同的。谷歌搜索这个主题并没有找到任何解释。

实际上,源代码搜索表明,如今,一个只是调用另一个,因此行为上没有区别。它只是因为它的名称更令人困惑而被弃用吗?似乎是一个相当奇怪的决定。

@Deprecated
public static boolean isJavaLetterOrDigit(char ch) {
    return isJavaIdentifierPart(ch);
}
4

2 回答 2

5

旧的(已弃用的)名称不能正确反映实现的实际作用;例如,它接受既不是字母也不是数字的字符。我想这会导致一些“错误”报告和来自困惑的开发人员的支持请求。IMO,这是他们采取(重要)步骤创建新方法并弃用旧方法的最可能原因。

(@HuiZheng 提出的其他原因在知识层面上是有效的,但不足以证明弃用方法是合理的。Java 人员不会仅仅根据良好的 API 设计原则来更改 API。弃用方法对开发人员有用,并且甲骨文不想疏远支付这些程序员薪水的公司。Java 因其稳定平台的声誉而在企业界获得了如此多的关注!)

无论如何,弃用这种方法(对我来说)似乎是出于正确的原因做出的明显且明智的 API 设计决定。无论哪种方式,我们的意见都是没有实际意义的。

于 2013-04-28T02:49:31.653 回答
5

原因一:

一个好的 API 名称应该足够抽象(但不能太抽象)。isJavaLetterOrDigit太注重执行了。如果这是你真正想要的,请isLetterOrDigit改用。

原因2:

一个好的 API 名称应该准确地说明其用途并且应该正确实施。isJavaLetterOrDigit用词不当,因为它实际上允许使用非字母或数字字符,例如“_”或“$”。

原因3:

一个好的 API 名称应该与其他名称协调一致。isJavaIdentifierPart与其他 API 一致,例如isJavaIdentifierStart, isUnicodeIdentifierPart, isIdentifierIgnorable.

最后,仅仅因为这两个 API 在行为上没有区别并不意味着它们是相同的。误导性的 API 名称会毒害您的代码。此外,始终尽快转储已弃用的 API,因为它们最终(或极有可能)会被库提供者转储。

于 2013-04-28T03:08:22.383 回答