CharSequence
представляет собой интерфейс; бывает, что String
реализует его.
Это означает, что, например, при вызове .charAt()
на String
, что на самом деле называется это реализация String
для этого метода CharSequence
.
Как вы можете видеть из javadoc CharSequence
, не многие классы в JDK фактически реализуют этот интерфейс.
Что касается причин, почему два конструктора, StringBuffer
относятся к Java 1.0 и CharSequence
, отображаются только в 1.4; однако, это также тот случай, что StringBuilder
(который вы должны использовать, действительно, вместо StringBuffer
) имеет два конструктора (один с CharSequence
как аргумент, другой с String
в качестве аргумента), поэтому, вероятно, есть оптимизация, если String
передается в качестве аргумента. Что касается таких оптимизаций, то это случай «Использовать источник, Люк» (tm).
В качестве примера реализации CharSequence
, которая не находится в JDK, вы можете, например, увидеть один из моих проектов: largetext. Обратите внимание, что, помимо прочего, генерирование Matcher
от Pattern
uses a CharSequence
and not a String
as an argument; и с String
реализует CharSequence
, ну, передавая String
в качестве аргумента.
Хорошо, я думал, что все такие вещи были удалены - 'String' заменен на' CharSequences' ... – Betlista
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk /6-b14/java/lang/StringBuffer.java#StringBuffer.%3Cinit%3E%28java.lang.String%29 – Maksym
@Maksym: он не описывает, почему существует этот избыточный конструктор, тот, у кого 'String', нет должен быть там ... – Betlista