Odpowiedzi:
Przywołując jego toString()metodę.
Zwraca ciąg znaków zawierający znaki w tej sekwencji w tej samej kolejności co ta sekwencja. Długość łańcucha będzie długością tej sekwencji.
Jest tutaj subtelna kwestia, która jest trochę gotcha.
toString()Metoda ma implementację w bazie Object. CharSequencejest interfejsem; i chociaż toString()metoda pojawia się jako część tego interfejsu, w czasie kompilacji nie ma niczego, co zmusiłoby cię do zastąpienia jej i przestrzegania dodatkowych ograniczeń, które CharSequence toString()javadoc narzuca na toString()metodę; tzn. powinien zwrócić ciąg zawierający znaki w kolejności zwracanej przez charAt().
Twoje IDE nawet ci nie pomoże, przypominając, że prawdopodobnie powinieneś to zmienić toString(). Na przykład w intellij zobaczysz to, jeśli utworzysz nową CharSequenceimplementację: http://puu.sh/2w1RJ . Zwróć uwagę na brak toString().
Jeśli polegasz na toString()arbitralności CharSequence, powinien on działać, pod warunkiem, że CharSequencerealizator wykonał swoją pracę poprawnie. Ale jeśli chcesz całkowicie uniknąć jakiejkolwiek niepewności, powinieneś użyć StringBuildera append(), i tak:
final StringBuilder sb = new StringBuilder(charSequence.length());
sb.append(charSequence);
return sb.toString();
CharSequence interfejs wyraźnie określa toString()- w implementor nie będzie brakowało tego. W JavaDoc stwierdza: „Zwraca ciąg zawierający znaki w tej kolejności, w tej samej kolejności co tej sekwencji. Długość łańcucha będzie długość tej sekwencji” od powstania w 1.4 . Ludzie, sprawdźcie, co głosujecie
StringBuildermoże równie dobrze nie spełnić oczekiwań. To samo dotyczy każdego innego interfejsu, takiego jak Listlub Set, w szczególności ich equals()i hashCode()metod, które będą kompilowane bez zastąpień, ale muszą zostać zastąpione zgodnie z umową.
Możesz bezpośrednio użyć String.valueOf ()
String.valueOf(charSequence)
Chociaż jest to to samo, co toString()sprawdzanie wartości zerowej charSequenceprzed faktycznym wywołaniem funkcjiString.
Jest to przydatne, gdy metoda może zwrócić wartość a charSequencelub null.
charSequencejest null, wówczas zwracany ciąg będzie "null"i nie będzie null.
setText(CharSequence)nie robi tego, czego potrzebujesz?