Mục đích của CharSequence
việc cung cấp chế độ xem chỉ đọc cho chuỗi ký tự và đó là chế độ xem. Giao diện này không cung cấp bất kỳ phương thức thao tác hoặc tìm kiếm chuỗi nào. Những cái đó nằm ngoài phạm vi.
Nguyên tắc phân chia giao diện cho thấy rằng các máy khách thuộc loại không nên phụ thuộc vào các phương thức mà chúng không sử dụng. Do đó, một giao diện chỉ nên khai báo bộ hữu ích tối thiểu. Nếu một trường hợp sử dụng khác nhau cần các phương thức khác nhau, thì nên có một giao diện khác.
Một khách hàng chỉ cần một nguồn ký tự có thể không cần các phương thức tìm kiếm.
Tất nhiên có thể lạm dụng Nguyên tắc này và kết thúc với một nghìn giao diện nhỏ. Điều đó cũng không tốt. Vì vậy, CharSequence
giao diện không chỉ chứa tối thiểu charAt()
và length()
phương thức, mà còn là phương thức tiện lợi liên quan sâu sắc subSequence()
. (Một CharSequence có thể có khả năng cung cấp một khung nhìn vào một chuỗi con mà không cần sao chép chuỗi, đó là lý do tại sao đây phải là một phương thức thể hiện). Chỉ định toString()
là OK vì phương thức đó sẽ được kế thừa từ Object
. Các phương pháp chars()
và codePoints()
thích ứng CharSequence
với một Stream
giao diện. Bởi vì đây là các phương thức mặc định, chúng không áp đặt các yêu cầu bổ sung cho các lớp thực hiện CharSequence
.
Các CharSequence
loại rất hữu ích khi một phương pháp cần có một nguồn nhân vật chung chung mà không chỉ định một việc thực hiện cụ thể (ví dụ như chuỗi vs CharBuffer vs StringBuilder). Các phương thức String#join()
và String#contains()
là những ví dụ tốt về việc sử dụng CharSequence
s.
Không cần thiết CharSequence
phải cung cấp một contains()
phương thức vì nó có thể được thực hiện bên ngoài. Mặc dù Java không có sự tiện lợi của các phương thức mở rộng của C #, nhưng một phương thức tĩnh về cơ bản là giống nhau. Vì vậy, thay vì boolean Editable#contains(CharSequence needle)
bạn sẽ có một static boolean contains(CharSequence haystack, CharSequence needle)
. Các thuật toán tìm kiếm chuỗi là một chủ đề khoa học máy tính được nghiên cứu kỹ lưỡng. Các thuật toán khác nhau với sự đánh đổi khác nhau là có sẵn.
Đọc thêm:
contains
không phải là một phương pháp đột biến, và có không phương pháp tồn tại tìm kiếm (charAt
), vậy làm thế nào thực hiện điều này áp dụng ?. Ngoài ra, " Vì đây là các phương thức mặc định, nên chúng không áp đặt các yêu cầu bổ sung cho các lớp triển khai CharSequence. " - Không thểcontains
được triển khai như một mặc định thông qua hàmreturn to String().contains(...)
, loại bỏ yêu cầu cho các lớp thực hiện?