为API选择CharSequence和String之间
String
是一个 CharSequence
。 Java库中的许多方法都接受CharSequence
因此它们更 CharSequence
。 有些classe有一个String
方法(例如, Writer.write(String)
),并且还使用等效的CharSequence
方法实现Appendable
(例如, Writer.append(CharSequence)
)。
如果我正在编写一个委托给这样一个类的类,并且需要一些文本输入,我可以选择该输入为String
或CharSequence
。 通过为客户提供更多选项,选择后者使课程更加灵活。 但我没有看到太多代码这样做:文本参数几乎总是一个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的替代品之前,我们必须三思而后行。