为什么不推荐使用isJavaLetterOrDigit?

Ant*_*ony 5 java deprecated

为什么该方法isJavaLetterOrDigitjava.lang.Character弃用?

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

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

@Deprecated
public static boolean isJavaLetterOrDigit(char ch) {
    return isJavaIdentifierPart(ch);
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 5

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

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

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


Hui*_*eng 5

原因1:

一个好的API名称应该足够抽象(但不要太抽象).isJavaLetterOrDigit太以实现为导向了.如果那是你真正想要的,那就isLetterOrDigit改用它.

原因2:

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

原因3:

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

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