在 API 的字符序列和字符串之间进行选择

2022-09-02 10:45:15

字符串是字符序列。Java库中的许多方法都接受,因此它们可以更普遍地运行。某些 classe 有一个方法(例如 ,),并且还使用等效的方法实现(例如,)。CharSequenceStringWriter.write(String)AppendableCharSequenceWriter.append(CharSequence)

如果我正在编写一个委托给此类类的类,并且需要一些文本输入,则可以选择该输入为 a 或 .选择后者使类更加灵活,为客户端提供了更多选项。但是我没有看到太多这样做的代码:文本参数几乎总是a而不是.使用是否有缺点?是否有性能下降?或者只是程序员的间歇性或无知导致使用而不是?StringCharSequenceStringCharSequenceCharSequenceStringCharSequence

比较

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

引用CharSequence Javadoc:

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

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


答案 2