A String
is-aCharSequence
. Wiele metod w bibliotece Java akceptuje CharSequence
, czyli they operate more generally. Niektóre classe mają metodę String
(na przykład Writer.write(String)
), a także implementują Appendable
z równoważną metodą CharSequence
(na przykład Writer.append(CharSequence)
).Wybór między CharSequence i String dla API
Jeśli piszę klasę, która deleguje do takiej klasy, ands potrzebuje trochę tekstu, mogę wybrać dla tego wejścia String
lub . Wybranie tej opcji powoduje, że klasa jest bardziej elastyczna, dając klientowi więcej opcji. Ale nie widzę wiele kodu, który to robi: argumenty tekstowe są prawie zawsze niezmienione, a nie String
, a nie CharSequence
. Czy jest jakiś minus w używaniu CharSequence
? Czy istnieje uderzenie wydajności? Czy jest to tylko programator intertia lub ignorancja, która powoduje użycie String
zamiast CharSequence
?
Porównaj
class XMLWriter {
private final Writer writer;
// more stuff here
public void writeComment(String text) {
writer.write("<!-- ");
writer.write(text);
writer.write(" -->");
}
}
z
class XMLWriter {
private final Writer writer;
// more stuff here
public void writeComment(CharSequence text) {
writer.write("<!-- ");
writer.append(text);
writer.write(" -->");
}
}
Twoja logika ma dla mnie wiele sensu. Korzystając z CharSequence, możesz zezwolić na kod wywołujący StringBuffer/StringBuilder bez potrzeby wywoływania toString() na nim - co zdarza się bardzo często. – Andy
@Andy tak, miałem na uwadze 'StringBuilder' kiedy napisałem pytanie. – Raedwald
Zobacz późniejsze powielenie tego pytania, [Kiedy używać CharSequence w interfejsie API] (http://stackoverflow.com/q/13234584/642706). –