Nie jestem pewien, co jest tego przyczyną, ale mogę podać przykład klasy, która implementuje CharSequence
. Jest to java.nio.CharBuffer
.
Teoretycznie może zaimplementować indexOf()
, wywołując w pętli charAt()
. Ale nie będzie działać tak, jak tego oczekuje użytkownik. Nie możemy rozróżnić dwóch sytuacji: postać jeszcze nie istnieje, a postaci nie ma i nie będzie jej tam. W drugim przypadku indexOf()
powinien zwrócić -1 na podstawie umowy. W pierwszym przypadku powinien poczekać, aż wszystkie bajty nadejdą. Ale CharBuffer należy do bez blokowania IO, więc nie można go zablokować.
Uważam, że wyjaśnia to przynajmniej jedną z możliwych przyczyn.
EDIT:
Po bardzo cenny komentarz przez @Pacerier chcę dodać, co następuje. IMHO CharSequence
jako bardzo ogólny interfejs używany w różnych okolicznościach. Najbardziej znanymi implementatorami tego interfejsu są String
, StringBuffer
i StringBuilder
, które przechowują całą zawartość w strukturze danych, która umożliwia bezpośredni dostęp do dowolnej postaci. Jest to jednak błędne w ogólnym przypadku. java.nio.CharBuffer
jest przykładem takiego przypadku.
Więc pytasz: Dlaczego 'CharSequence' nie ma metody' indexOf'? –
StringBuffer i StringBuilder mają metody indexOf, choć ... – Thilo
@Thilo - Który rodzaj błaga pytanie, dlaczego CharSequence nie określa tego zachowania? (I chociaż java.nio.CharBuffer i javax.swing.text.Segment nie implementują 'indexOf', to z łatwością mogłyby.) –