ประเด็นCharSequenceคือเพื่อให้มุมมองแบบอ่านอย่างเดียวกับลำดับตัวอักษรและนั่นคือมัน อินเตอร์เฟสนี้ไม่มีการจัดการสตริงหรือวิธีการค้นหาใด ๆ สิ่งเหล่านั้นอยู่นอกขอบเขต
หลักการแยกส่วนต่อประสานแสดงให้เห็นว่าลูกค้าประเภทไม่ควรพึ่งพาวิธีการที่พวกเขาไม่ได้ใช้ ดังนั้นอินเตอร์เฟสควรประกาศเฉพาะชุดที่มีประโยชน์น้อยที่สุดเท่านั้น หากกรณีการใช้งานที่แตกต่างกันต้องการวิธีการที่แตกต่างกันควรมีอินเตอร์เฟซที่แตกต่างกัน
ไคลเอนต์ที่ต้องการแหล่งอักขระเท่านั้นอาจไม่ต้องการวิธีการค้นหา
แน่นอนว่าเป็นไปได้ที่จะหักล้างหลักการนี้และจบลงด้วยอินเตอร์เฟซเล็ก ๆ น้อย ๆ นับพัน ไม่ดีเหมือนกัน ดังนั้นCharSequenceอินเตอร์เฟซที่ไม่เพียง แต่มีน้อยที่สุดcharAt()และlength()วิธีการ subSequence()แต่ยังเป็นวิธีที่สะดวกสบายที่เกี่ยวข้องอย่างลึกซึ้ง (CharSequence สามารถให้มุมมองในการเรียงลำดับโดยไม่ต้องคัดลอกสตริงซึ่งเป็นเหตุผลที่นี้ควรเป็นวิธีการตัวอย่าง) ระบุtoString()เป็น OK Objectเนื่องจากวิธีการที่จะได้รับมรดกอยู่แล้วจาก วิธีการchars()และcodePoints()ปรับให้เข้าCharSequenceกับStreamส่วนต่อประสาน CharSequenceเพราะสิ่งเหล่านี้เป็นวิธีเริ่มต้นพวกเขาไม่ได้กำหนดความต้องการที่เพิ่มขึ้นสำหรับการดำเนินการในชั้นเรียน
CharSequenceประเภทจะเป็นประโยชน์เมื่อวิธีการที่จำเป็นต้องมีแหล่งที่มาของตัวละครทั่วไปโดยไม่ได้ระบุการดำเนินการโดยเฉพาะ (เช่น String กับ CharBuffer กับ StringBuilder) String#join()และString#contains()วิธีการเป็นตัวอย่างที่ดีของการใช้CharSequences
ไม่จำเป็นต้องCharSequenceจัดเตรียมcontains()วิธีการเนื่องจากสามารถนำไปใช้ภายนอกได้ ในขณะที่ Java ไม่มีความสะดวกสบายของวิธีการขยาย C # วิธีแบบคงที่เป็นหลักสิ่งเดียวกัน ดังนั้นแทนที่จะboolean Editable#contains(CharSequence needle)เป็นstatic boolean contains(CharSequence haystack, CharSequence needle)คุณ อัลกอริธึมการค้นหาสตริงเป็นหัวข้อวิทยาศาสตร์คอมพิวเตอร์ที่ได้รับการศึกษาเป็นอย่างดี อัลกอริทึมที่แตกต่างกับการแลกเปลี่ยนที่แตกต่างกันจะพร้อมใช้งาน
อ่านเพิ่มเติม:
containsไม่ได้เป็นวิธีการกลายพันธุ์และมีไม่วิธีการที่มีอยู่การค้นหา (charAt) ดังนั้นวิธีนี้จะใช้ ?. นอกจากนี้ " เนื่องจากสิ่งเหล่านี้เป็นวิธีการเริ่มต้นจึงไม่ได้กำหนดข้อกำหนดเพิ่มเติมสำหรับคลาสที่ใช้ CharSequence " - ไม่containsสามารถใช้เป็นค่าเริ่มต้นผ่านทาง implreturn to String().contains(...)ลบข้อกำหนดสำหรับคลาสที่จะใช้งานได้หรือไม่