为什么不推荐使用isJavaLetterOrDigit?

时间:2013-04-28 02:40:41

标签: java deprecated

为什么isJavaLetterOrDigit中的方法java.lang.Character已弃用?

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

事实上,源代码搜索显示,现在,一个人只是调用另一个,所以行为没有区别。它只是被弃用了,因为它有一个更令人困惑的名字?似乎是一个相当奇怪的决定。

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

2 个答案:

答案 0 :(得分:5)

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

(@HuiZheng提出的其他理由是知识层面上的有效点,但不足以证明弃用某种方法。仅仅基于良好的API设计原则,Java人员不会改变API。弃用方法会使工作变得有效对于开发人员而言,Oracle并不想疏远那些支付程序员工资的公司。由于Java作为一个稳定的平台,它在企业界获得了很大的关注!)

无论如何,对我来说,弃用这种方法似乎是一个明显而合理的API设计决策,因为正确的原因。无论哪种方式,我们的意见都没有实际意义。

答案 1 :(得分:5)

原因1:

一个好的API名称应该足够抽象(但不要过于抽象)。 isJavaLetterOrDigit过于面向实现。如果您真正想要的话,请改用isLetterOrDigit

原因2:

一个好的API名称应该准确指定其用途,并且应该正确实现。 isJavaLetterOrDigit用词不当,因为它实际上允许非letterOrDigit字符,例如“_”或“$”。

原因3:

一个好的API名称应与其他人一致。 isJavaIdentifierPart与其他API一致,例如isJavaIdentifierStartisUnicodeIdentifierPartisIdentifierIgnorable

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