为什么isJavaLetterOrDigit
中的方法java.lang.Character
已弃用?
文档说应该使用方法isJavaIdentifierPart
,但不指出原因。这两种方法的文档在其他方面是相同的。谷歌搜索主题没有得到任何解释。
事实上,源代码搜索显示,现在,一个人只是调用另一个,所以行为没有区别。它只是被弃用了,因为它有一个更令人困惑的名字?似乎是一个相当奇怪的决定。
@Deprecated
public static boolean isJavaLetterOrDigit(char ch) {
return isJavaIdentifierPart(ch);
}
答案 0 :(得分:5)
旧(已弃用)名称未正确反映实施的实际内容;例如它接受既不是字母也不是数字的字符。我想这会导致一些“错误”报告和来自困惑的开发人员的支持请求。 IMO,这是他们采取(重大)创建新方法并弃用旧方法的最可能原因。
(@HuiZheng提出的其他理由是知识层面上的有效点,但不足以证明弃用某种方法。仅仅基于良好的API设计原则,Java人员不会改变API。弃用方法会使工作变得有效对于开发人员而言,Oracle并不想疏远那些支付程序员工资的公司。由于Java作为一个稳定的平台,它在企业界获得了很大的关注!)
无论如何,对我来说,弃用这种方法似乎是一个明显而合理的API设计决策,因为正确的原因。无论哪种方式,我们的意见都没有实际意义。
答案 1 :(得分:5)
原因1:
一个好的API名称应该足够抽象(但不要过于抽象)。 isJavaLetterOrDigit
过于面向实现。如果您真正想要的话,请改用isLetterOrDigit
。
原因2:
一个好的API名称应该准确指定其用途,并且应该正确实现。 isJavaLetterOrDigit
用词不当,因为它实际上允许非letterOrDigit字符,例如“_”或“$”。
原因3:
一个好的API名称应与其他人一致。 isJavaIdentifierPart
与其他API一致,例如isJavaIdentifierStart
,isUnicodeIdentifierPart
,isIdentifierIgnorable
。
最后,仅仅因为这两个API之间的行为没有区别并不意味着它们是相同的。误导性API名称会破坏您的代码。此外,始终尽快转储已弃用的API,因为它们最终(或很可能)会被库提供程序转储。