在API的CharSequence和String之间进行选择

Rae*_*ald 20 java string charsequence

A String 是-a CharSequence.Java库中的许多方法都接受,CharSequence因此它们可以更普遍地运行.有些classe有一个String方法(例如Writer.write(String)),并且还Appendable使用等效CharSequence方法(例如Writer.append(CharSequence))实现.

如果我正在编写一个委托给这样一个类的类,并且需要一些文本输入,我可以选择输入为a String或a 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(" -->");
   }
}
Run Code Online (Sandbox Code Playgroud)

class XMLWriter {
   private final Writer writer;

   // more stuff here

   public void writeComment(CharSequence text) {
      writer.write("<!-- ");
      writer.append(text);
      writer.write(" -->");
   }
}
Run Code Online (Sandbox Code Playgroud)

blo*_*lob 14

根据CharSequence的 javadoc

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

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