A String
jest niezmienne (tj. Tekst nie może się zmienić). Nie ma też żadnych powiązanych z nim rozpiętości. (Rozpiętości to zakresy w tekście, które zawierają informacje dotyczące stylu, takie jak kolor, wyróżnienie, kursywa, łącza itp.) Możesz więc użyć znaku a, String
gdy tekst nie wymaga zmiany i nie wymaga stylizacji.
A StringBuilder
ma zmienny tekst, więc możesz go modyfikować bez tworzenia nowego obiektu. Jednak nie ma żadnych informacji o rozpiętości. To tylko zwykły tekst. Dlatego używaj a, StringBuilder
gdy musisz zmienić tekst, ale nie dbasz o stylizację.
A SpannedString
ma niezmienny tekst (taki jak a String
) i niezmienne informacje o rozpiętości. Jest to konkretna implementacja wymagań zdefiniowanych przez Spanned
interfejs. Użyj a, SpannedString
gdy twój tekst ma styl, ale nie musisz zmieniać ani tekstu, ani stylu po jego utworzeniu.
Uwaga: Nie ma czegoś takiego jak a, SpannedStringBuilder
ponieważ gdyby tekst się zmienił, informacja o rozpiętości prawdopodobnie również musiałaby ulec zmianie.
A SpannableString
ma niezmienny tekst, ale jego informacje o rozpiętości są zmienne. Jest to konkretna implementacja wymagań zdefiniowanych przez Spannable
interfejs. Użyj a, SpannableString
gdy nie musisz zmieniać tekstu, ale styl tak.
A SpannableStringBuilder
ma zmienny tekst i informacje o zakresie. Jest to konkretna implementacja wymagań zdefiniowanych przez interfejsy Spannable
i Editable
(między innymi). Użyj, SpannableStringBuilder
gdy będziesz musiał zaktualizować tekst i jego styl.
A CharSequence
to interfejs, a nie konkretna klasa. Oznacza to, że po prostu definiuje listę reguł, których należy przestrzegać dla każdej klasy, która go implementuje. I wszystkie wymienione powyżej klasy go implementują. Możesz więc użyć a, CharSequence
gdy chcesz uogólnić typ obiektu, który masz, aby uzyskać maksymalną elastyczność. Można zawsze przygnębiony go na String
lub SpannableStringBuilder
lub cokolwiek później, jeśli zajdzie taka potrzeba.