Выбор между CharSequence и String для API

A String is-a CharSequence. Многие методы в библиотеке Java принимают CharSequence, поэтому работают более широко. Некоторые классы имеют метод 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(" -->");
   }
}

Ответ 1

Согласно javadoc CharSequence

Этот интерфейс не уточняет общие контракты равных и hashCode. Результат сравнения двух объектов, реализующих Таким образом, CharSequence, вообще говоря, undefined. Каждый объект может быть реализуется другим классом, и нет никакой гарантии, что каждый класс будет способен проверять свои экземпляры на равенство с теми другой. Поэтому неуместно использовать произвольные Экземпляры CharSequence как элементы в наборе или как ключи на карте.

Следовательно, IMO Мы должны подумать дважды, прежде чем использовать CharSequnce в качестве замены для String.