为API选择CharSequence和String之间

String 是一个 CharSequence 。 Java库中的许多方法都接受CharSequence因此它们更 CharSequence 。 有些classe有一个String方法(例如, Writer.write(String) ),并且还使用等效的CharSequence方法实现Appendable (例如, Writer.append(CharSequence) )。

如果我正在编写一个委托给这样一个类的类,并且需要一些文本输入,我可以选择该输入为StringCharSequence 。 通过为客户提供更多选项,选择后者使课程更加灵活。 但我没有看到太多代码这样做:文本参数几乎总是一个String而不是一个CharSequence 。 使用CharSequence吗? 是否有性能受损? 或者只是程序员的intertia或无知会导致使用String而不是CharSequence

比较

 class XMLWriter { private final Writer writer; // more stuff here public void writeComment(String text) { writer.write(""); } } 

 class XMLWriter { private final Writer writer; // more stuff here public void writeComment(CharSequence text) { writer.write(""); } } 

根据CharSequence的 javadoc

此接口不会细化equals和hashCode方法的常规协定。 因此,比较实现CharSequence的两个对象的结果通常是未定义的。 每个对象可以由不同的类实现,并且不能保证每个类能够测试其实例与另一个的实例是否相等。 因此,将任意CharSequence实例用作集合中的元素或映射中的键是不合适的。

因此IMO在使用CharSequnce作为String的替代品之前,我们必须三思而后行。