A String
is-a CharSequence
。 Java库中的许多方法接受CharSequence
所以they operate more generally。有些classe使用String
方法(例如,Writer.write(String)
),并使用等效的Appendable
方法实现CharSequence
(例如,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("<!-- ");
writer.write(text);
writer.write(" -->");
}
}
与
class XMLWriter {
private final Writer writer;
// more stuff here
public void writeComment(CharSequence text) {
writer.write("<!-- ");
writer.append(text);
writer.write(" -->");
}
}
答案 0 :(得分:13)
此接口不会细化equals和的常规合约 hashCode方法。比较实现的两个对象的结果 因此,CharSequence通常是未定义的。每个对象可能是 由不同的类实现,并不能保证每个 class将能够测试其实例是否与这些实例相等 另一个。因此,任意使用是不合适的 CharSequence实例作为集合中的元素或映射中的键。
因此IMO在使用CharSequnce作为String的替代品之前,我们必须三思而行。