मुद्दा CharSequenceयह है कि एक चरित्र अनुक्रम को केवल-पढ़ने के लिए दृश्य प्रदान करना है, और यह बात है। यह इंटरफ़ेस कोई स्ट्रिंग हेरफेर या खोज के तरीके प्रदान नहीं करता है। जो दायरे से बाहर हैं।
इंटरफ़ेस अलगाव सिद्धांत से पता चलता है कि एक प्रकार के ग्राहकों को उन तरीकों पर निर्भर नहीं होना चाहिए जो वे उपयोग नहीं करते हैं। इसलिए, एक इंटरफ़ेस को केवल न्यूनतम उपयोगी सेट घोषित करना चाहिए। यदि एक अलग उपयोग के मामले में अलग-अलग तरीकों की आवश्यकता है, तो एक अलग इंटरफ़ेस होना चाहिए।
एक क्लाइंट जिसे केवल एक चरित्र स्रोत की आवश्यकता होती है, उसे खोज विधियों की आवश्यकता नहीं होती है।
इस सिद्धांत को पूरा करना और एक हजार छोटे इंटरफेस के साथ समाप्त करना निश्चित रूप से संभव है। यह भी अच्छा नहीं है। इसलिए CharSequenceइंटरफ़ेस में न केवल न्यूनतम charAt()और length()विधियाँ शामिल हैं, बल्कि गहराई से संबंधित सुविधा विधि भी है subSequence()। (एक CharSequence संभावना एक स्ट्रिंग प्रति के बिना बाद में एक दृश्य प्रदान कर सकता है, यही कारण है कि यह एक उदाहरण विधि होना चाहिए)। निर्दिष्ट करना toString()ठीक है क्योंकि यह विधि वैसे भी विरासत में मिली होगी Object। तरीकों chars()और एक इंटरफ़ेस के लिए codePoints()अनुकूल है । क्योंकि ये डिफ़ॉल्ट तरीके हैं, वे लागू करने वाली कक्षाओं के लिए अतिरिक्त आवश्यकताओं को लागू नहीं करते हैं ।CharSequenceStreamCharSequence
CharSequenceजब एक विधि एक विशेष कार्यान्वयन को निर्दिष्ट (जैसे स्ट्रिंग बनाम CharBuffer बनाम StringBuilder) के बिना एक सामान्य चरित्र स्रोत की जरूरत है प्रकार उपयोगी है। String#join()और String#contains()तरीकों का उपयोग कर के अच्छे उदाहरण हैं CharSequenceरों।
यह CharSequenceएक contains()विधि प्रदान करने के लिए आवश्यक नहीं है क्योंकि इसे बाहरी रूप से लागू किया जा सकता है। जबकि जावा में C # एक्सटेंशन विधियों की सुविधा नहीं है, एक स्थिर विधि अनिवार्य रूप से एक ही बात है। इसलिए आपके बजाय boolean Editable#contains(CharSequence needle)ए static boolean contains(CharSequence haystack, CharSequence needle)। स्ट्रिंग खोज एल्गोरिदम एक अच्छी तरह से अध्ययन किए गए कंप्यूटर विज्ञान विषय हैं। विभिन्न ट्रेडऑफ़ के साथ अलग-अलग एल्गोरिदम आसानी से उपलब्ध हैं।
आगे की पढाई:
containsएक परिवर्तन तरीका नहीं है, और वहाँ है अस्तित्व खोज तरीकों (charAt), तो यह कैसे लागू होता है ?. इसके अलावा, " क्योंकि ये डिफ़ॉल्ट विधियां हैं, वे CharSequence को लागू करने वाली कक्षाओं के लिए अतिरिक्त आवश्यकताओं को लागू नहीं करते हैं। " -containsलागूreturn to String().contains(...)करने के लिए कक्षाओं की आवश्यकता को हटाते हुए, इसे निहितार्थ के माध्यम से डिफ़ॉल्ट के रूप में लागू नहीं किया जा सकता है ?