Noktası CharSequence
, bir karakter dizisine salt okunur bir görünüm sağlamak için, ve bu. Bu arabirim herhangi bir dize düzenleme veya arama yöntemi sağlamaz. Bunlar kapsam dışı.
Arabirim Ayırma İlkesi, bir tür istemcilerin kullanmadığı yöntemlere bağlı olmaması gerektiğini önerir. Bu nedenle, bir arabirim yalnızca minimal kullanışlı kümesi bildirmelidir. Farklı bir kullanım senaryosunun farklı yöntemlere ihtiyacı varsa, farklı bir arayüz olmalıdır.
Yalnızca bir karakter kaynağına ihtiyaç duyan bir istemcinin arama yöntemlerine ihtiyacı yoktur.
Elbette bu Prensibi aşmak ve bin küçük arayüze sahip olmak mümkündür. Bu da iyi değil. Bu yüzden CharSequence
arayüz sadece minimal charAt()
ve length()
yöntemleri değil, aynı zamanda derinden ilgili kolaylık yöntemini de içerir subSequence()
. (Bir CharSequence muhtemelen bir dize kopyası olmadan bir alt diziye bir görünüm sağlayabilir, bu yüzden bunun bir örnek yöntemi olması gerekir). Belirtme toString()
tamam çünkü bu yöntem yine de devralınacak Object
. Yöntemler chars()
ve bir arayüze codePoints()
uyum sağlar. Bunlar varsayılan yöntemler olduğundan, sınıfların uygulanması için ek gereksinimler getirmezler .CharSequence
Stream
CharSequence
CharSequence
Bir yöntem (örneğin Dize vs CharBuffer vs StringBuilder) özel uygulamasını belirtmeden genel karakter kaynağını gerektiğinde türü yararlıdır. String#join()
Ve String#contains()
yöntemler kullanılarak iyi örneklerdir CharSequence
s.
Harici olarak uygulanabileceği CharSequence
için bir contains()
yöntem sağlamak gerekli değildir . Java, C # 'ın genişletme yöntemlerinin kolaylığına sahip olmasa da, statik bir yöntem esasen aynı şeydir. Yani boolean Editable#contains(CharSequence needle)
senin yerine bir static boolean contains(CharSequence haystack, CharSequence needle)
. Dize arama algoritmaları , iyi çalışılmış bir bilgisayar bilimi konusudur. Farklı değiş tokuşlara sahip farklı algoritmalar kolayca kullanılabilir.
Daha fazla okuma:
contains
bir mutasyon yöntemi değildir ve orada yok exist arama yöntemleri (charAt
), bu yüzden bu nasıl geçerlidir ?. Ayrıca, " Bunlar varsayılan yöntemler olduğundan, CharSequence uygulayan sınıflar için ek gereksinimler getirmezler. " - Sınıfların uygulanması gereksinimi kaldırılarak, implcontains
aracılığıyla varsayılanreturn to String().contains(...)
olarak uygulanamadı mı?