CharSequence
Существует больше классов, чем просто String
, которые реализуют читаемые последовательности символов, т.е. похожи на String
.
Интерфейс CharSequence
представляет их, см. Документацию :
A CharSequence
- это читаемая последовательность char
значений . Этот интерфейс обеспечивает унифицированный доступ только для чтения ко многим различным типам последовательностей символов. [...]
Известные на данный момент классы реализации: CharBuffer
, Segment
, String
, StringBuffer
, StringBuilder
. Как видите, String
- лишь один из них, их больше.
Модульность
Если ваш метод принимает CharSequence
, тогда он гораздо более модульный, так как он также может принимать другие классы string-i sh.
Очевидно, что CharSequence
немного ограничен в своих возможностях (проверьте предлагаемые методы). Таким образом, не все строковые методы могут быть выполнены на CharSequence
. Иногда вам нужны дополнительные функции, которые предлагает String
, тогда вы не можете работать с CharSequence
.
Это очень базовая концепция c, во многом как некоторые вещи можно делать на Animal
но другие, например bark()
, могут быть выполнены только с Dog
.
replace
и startsWith
В вашем конкретном примере c причина на самом деле обратная совместимость .
Интерфейс CharSequence
был добавлен в Java 1,4 , его не было с самого начала.
Однако startsWith
, хотя теоретически он мог работать с CharSequence
, был добавлен в Java 1.0 уже, где он еще не был доступен.
replace
был добавлен с Java 1.5 , поэтому после CharSequence
было что-то.
Из-за обратной совместимости , Java создатели не могут просто редактировать startsWith
и использовать вместо него CharSequence
. Он должен продолжать использовать String
.