요점은 CharSequence
문자 순서에 대한 읽기 전용보기를 제공하는 것입니다. 이 인터페이스는 문자열 조작 또는 검색 방법을 제공하지 않습니다. 그것들은 범위를 벗어납니다.
인터페이스 분리 원칙은 유형의 클라이언트가 사용하지 않는 메소드에 의존해서는 안된다고 제안합니다. 따라서 인터페이스는 최소한의 유용한 집합 만 선언해야합니다. 다른 유스 케이스에 다른 메소드가 필요한 경우 다른 인터페이스가 있어야합니다.
문자 소스 만 필요한 클라이언트에는 검색 방법이 필요하지 않습니다.
물론이 원리를 과장하고 수천 개의 작은 인터페이스로 끝날 수 있습니다. 그것도 좋지 않습니다. 따라서 CharSequence
인터페이스에는 최소 charAt()
및 length()
메소드뿐만 아니라 깊이 관련된 편의 메소드도 포함 subSequence()
됩니다. CharSequence는 문자열 복사본이없는 서브 시퀀스에 대한 뷰를 제공 할 수 있으므로 이것이 인스턴스 메소드 여야합니다. toString()
이 메소드는에서 상속 받으므로 지정 해도됩니다 Object
. 방법 chars()
및 codePoints()
적응 CharSequence
A와 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를 구현하는 클래스에 대한 추가 요구 사항을 부과하지 않습니다. "-contains
impl을 통해 기본값으로 구현할 수 없어 클래스 구현에return to String().contains(...)
대한 요구 사항이 제거 되었습니까?