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

时间:2011-12-09 12:10:53

标签: java string charsequence

A String is-a CharSequence。 Java库中的许多方法接受CharSequence所以they operate more generally。有些classe使用String方法(例如,Writer.write(String)),并使用等效的Appendable方法实现CharSequence(例如,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("<!-- ");
      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(" -->");
   }
}

1 个答案:

答案 0 :(得分:13)

根据CharSequence

的javadoc
  

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

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