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
. CharSequence
jest 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ą CharSequence
implementację: http://puu.sh/2w1RJ . Zwróć uwagę na brak toString()
.
Jeśli polegasz na toString()
arbitralności CharSequence
, powinien on działać, pod warunkiem, że CharSequence
realizator wykonał swoją pracę poprawnie. Ale jeśli chcesz całkowicie uniknąć jakiejkolwiek niepewności, powinieneś użyć StringBuilder
a 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
StringBuilder
może równie dobrze nie spełnić oczekiwań. To samo dotyczy każdego innego interfejsu, takiego jak List
lub 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 charSequence
przed faktycznym wywołaniem funkcjiString.
Jest to przydatne, gdy metoda może zwrócić wartość a charSequence
lub null
.
charSequence
jest null, wówczas zwracany ciąg będzie "null"
i nie będzie null
.
setText(CharSequence)
nie robi tego, czego potrzebujesz?