Intinya CharSequence
adalah untuk memberikan tampilan hanya baca ke urutan karakter, dan hanya itu. Antarmuka ini tidak menyediakan manipulasi string atau metode pencarian. Itu di luar jangkauan.
Prinsip Segregasi Antarmuka menyarankan bahwa klien dari suatu tipe tidak boleh bergantung pada metode yang tidak mereka gunakan. Oleh karena itu, sebuah antarmuka harus menyatakan hanya set minimal yang bermanfaat. Jika use case yang berbeda membutuhkan metode yang berbeda, harus ada antarmuka yang berbeda.
Klien yang hanya membutuhkan sumber karakter kemungkinan tidak membutuhkan metode pencarian.
Tentu saja mungkin untuk berlebihan Prinsip ini dan berakhir dengan seribu antarmuka kecil. Itu juga tidak baik. Jadi CharSequence
antarmuka tidak hanya berisi metode minimal charAt()
dan length()
, tetapi juga metode kenyamanan yang sangat terkait subSequence()
. (A CharSequence kemungkinan dapat memberikan tampilan ke urutan tanpa salinan string, itulah sebabnya ini harus menjadi metode instance). Menentukan toString()
tidak apa-apa karena metode itu akan tetap diwarisi dari Object
. Metode chars()
dan codePoints()
beradaptasi CharSequence
dengan Stream
antarmuka. Karena ini adalah metode default, mereka tidak memaksakan persyaratan tambahan untuk implementasi kelas CharSequence
.
The CharSequence
jenis ini berguna bila metode membutuhkan sumber karakter generik tanpa menentukan implementasi tertentu (misalnya String vs CharBuffer vs StringBuilder). Metode String#join()
dan String#contains()
adalah contoh yang baik dari menggunakan CharSequence
s.
Tidak perlu untuk CharSequence
memberikan contains()
metode karena dapat diterapkan secara eksternal. Meskipun Java tidak memiliki kenyamanan metode ekstensi C #, metode statis pada dasarnya adalah hal yang sama. Jadi, alih-alih boolean Editable#contains(CharSequence needle)
Anda akan memiliki static boolean contains(CharSequence haystack, CharSequence needle)
. Algoritma pencarian string adalah topik ilmu komputer yang dipelajari dengan baik. Algoritma yang berbeda dengan pengorbanan yang berbeda sudah tersedia.
Bacaan lebih lanjut:
contains
bukan metode mutasi, dan ada tidak metode yang ada pencarian (charAt
), jadi bagaimana ini berlaku ?. Juga, " Karena ini adalah metode default, mereka tidak memaksakan persyaratan tambahan untuk kelas yang mengimplementasikan CharSequence. " - Tidakcontains
dapat diimplementasikan sebagai default melalui implreturn to String().contains(...)
, menghapus persyaratan untuk mengimplementasikan kelas?contains()
bisa menjadi metode default. Jika ada itu tidak harus diimplementasikan dalam halString#contains
tetapi sebaliknya: String harus menggunakan implementasi CharSequence. ThecharAt()
berbeda. Itu tidak menerapkan algoritma pencarian, itu adalah bagian penting dariCharSequence
: tanpa itu, isinya tidak dapat disalin ke jenis yang berbeda sepertiString
. Streaming adalah bagian penting dari Java8, dan menambahkan metode default ini sejalan dengan penambahan ke antarmuka lain sepertiCollection
.