요점은 CharSequence문자 순서에 대한 읽기 전용보기를 제공하는 것입니다. 이 인터페이스는 문자열 조작 또는 검색 방법을 제공하지 않습니다. 그것들은 범위를 벗어납니다.
인터페이스 분리 원칙은 유형의 클라이언트가 사용하지 않는 메소드에 의존해서는 안된다고 제안합니다. 따라서 인터페이스는 최소한의 유용한 집합 만 선언해야합니다. 다른 유스 케이스에 다른 메소드가 필요한 경우 다른 인터페이스가 있어야합니다.
문자 소스 만 필요한 클라이언트에는 검색 방법이 필요하지 않습니다.
물론이 원리를 과장하고 수천 개의 작은 인터페이스로 끝날 수 있습니다. 그것도 좋지 않습니다. 따라서 CharSequence인터페이스에는 최소 charAt()및 length()메소드뿐만 아니라 깊이 관련된 편의 메소드도 포함 subSequence()됩니다. CharSequence는 문자열 복사본이없는 서브 시퀀스에 대한 뷰를 제공 할 수 있으므로 이것이 인스턴스 메소드 여야합니다. toString()이 메소드는에서 상속 받으므로 지정 해도됩니다 Object. 방법 chars()및 codePoints()적응 CharSequenceA와 Stream인터페이스를 제공합니다. 이것들은 기본 메소드이므로 구현하는 클래스에 대한 추가 요구 사항을 부과하지 않습니다 CharSequence.
이 CharSequence유형은 특정 구현을 지정하지 않고 메소드에 일반 문자 소스가 필요한 경우에 유용합니다 (예 : String vs. CharBuffer vs. StringBuilder). String#join()및 String#contains()방법은 사용의 좋은 예 CharSequence들.
외부 적으로 구현할 수 있으므로 메소드 CharSequence를 제공 할 필요가 없습니다 contains(). Java는 C #의 확장 메소드의 편리함이 없지만 정적 메소드는 본질적으로 동일합니다. 그래서 boolean Editable#contains(CharSequence needle)당신 대신 에을 가질 것 static boolean contains(CharSequence haystack, CharSequence needle)입니다. 문자열 검색 알고리즘 은 잘 연구 된 컴퓨터 과학 주제입니다. 다른 트레이드 오프를 가진 다른 알고리즘을 쉽게 사용할 수 있습니다.
더 읽을 거리 :
contains돌연변이의 방법이 아닙니다, 거기 않는 존재의 검색 방법은 (charAt), 그래서 이것은 어떻게 적용됩니까? 또한 " 이것은 기본 메소드이므로 CharSequence를 구현하는 클래스에 대한 추가 요구 사항을 부과하지 않습니다. "-containsimpl을 통해 기본값으로 구현할 수 없어 클래스 구현에return to String().contains(...)대한 요구 사항이 제거 되었습니까?