Почему метод String.index не является частью интерфейса CharSequence? - PullRequest
8 голосов
/ 06 декабря 2011

Я не вижу никаких недостатков в создании String.indexOf части интерфейса CharSequence.Преимущество будет в том, что другие классы, такие как StringBuffer или StringBuilder, также должны будут реализовывать методы indexOf.

Так есть ли какая-то причина, почему indexOf должна быть только частью String?

Спасибо.

Ответы [ 3 ]

8 голосов
/ 06 декабря 2011

Я не уверен, что является причиной этого, но я могу привести пример класса, который реализует CharSequence.Это java.nio.CharBuffer.

Теоретически он может реализовать indexOf(), вызывая charAt() в цикле.Но это не будет работать так, как ожидает пользователь.Мы не можем различить 2 ситуации: персонажа еще нет, а персонажа нет и не будет.Во втором случае indexOf() должен вернуть -1 по контракту.В первом случае он должен ждать, пока все байты не поступят.Но CharBuffer принадлежит к неблокирующему IO , поэтому он не может блокировать.

Я полагаю, это объясняет, по крайней мере, одну из возможных причин.

РЕДАКТИРОВАТЬ:

После очень ценного комментария @Pacerier я хочу добавить следующее.ИМХО CharSequence как очень общий интерфейс, который используется в разных обстоятельствах.Наиболее известными разработчиками этого интерфейса являются String, StringBuffer и StringBuilder, которые содержат весь контент в структуре данных, что обеспечивает прямой доступ к любому символу.Это, однако, неправильно в общем случае.java.nio.CharBuffer является примером такого случая.

3 голосов
/ 06 декабря 2011

Я думаю, что это просто недосмотр, поскольку операция indexOf имеет смысл для любой последовательности.

2 голосов
/ 06 декабря 2011

Java 8 может решить некоторые из этих проблем.Это позволит реализации по умолчанию на интерфейсах.например,

interface List {
    void sort() default Collections.sort(this);
}

Это позволяет добавлять дополнительные методы к интерфейсам, не обременяя всех исполнителей реализацией этого метода.

...