A String
is-aCharSequence
. Nhiều phương thức trong thư viện Java chấp nhận CharSequence
để they operate more generally. Một số classe có phương pháp String
(ví dụ: Writer.write(String)
) và cũng thực hiện Appendable
với phương thức tương đương CharSequence
(ví dụ: Writer.append(CharSequence)
).Chọn giữa CharSequence và Chuỗi cho một API
Nếu tôi đang viết một lớp đại biểu cho một lớp như vậy và cần một số kiểu nhập văn bản, tôi có thể chọn cho đầu vào đó là String
hoặc CharSequence
. Việc chọn sau sẽ giúp lớp học linh hoạt hơn, bằng cách cung cấp cho khách hàng nhiều tùy chọn hơn. Nhưng tôi không thấy nhiều mã thực hiện như vậy: các đối số văn bản gần như không đổi là String
thay vì một số CharSequence
. Có mặt hạn chế để sử dụng CharSequence
không? Có một hit hiệu suất? Hoặc là nó chỉ là lập trình intertia hoặc sự thiếu hiểu biết gây ra việc sử dụng String
thay vì CharSequence
?
Hãy so sánh
class XMLWriter {
private final Writer writer;
// more stuff here
public void writeComment(String text) {
writer.write("<!-- ");
writer.write(text);
writer.write(" -->");
}
}
với
class XMLWriter {
private final Writer writer;
// more stuff here
public void writeComment(CharSequence text) {
writer.write("<!-- ");
writer.append(text);
writer.write(" -->");
}
}
Logic của bạn có ý nghĩa với tôi. Bằng cách sử dụng CharSequence bạn sẽ cho phép mã gọi để cung cấp một StringBuffer/StringBuilder mà không cần gọi toString() trên nó - điều này xảy ra rất nhiều. – Andy
@Andy vâng, tôi đã có 'StringBuilder' trong đầu khi tôi viết câu hỏi. – Raedwald
Xem câu hỏi sau này trùng lặp, [Khi nào sử dụng CharSequence trong API] (http://stackoverflow.com/q/13234584/642706). –