Jak przekonwertować Javę CharSequence
na String
?
java
string
charsequence
Belgi
źródło
źródło
setText(CharSequence)
nie robi tego, czego potrzebujesz?Jest tutaj subtelna kwestia, która jest trochę gotcha.
toString()
Metoda ma implementację w bazieObject
.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óreCharSequence
toString()
javadoc narzuca natoString()
metodę; tzn. powinien zwrócić ciąg zawierający znaki w kolejności zwracanej przezcharAt()
.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 braktoString()
.Jeśli polegasz na
toString()
arbitralnościCharSequence
, powinien on działać, pod warunkiem, żeCharSequence
realizator wykonał swoją pracę poprawnie. Ale jeśli chcesz całkowicie uniknąć jakiejkolwiek niepewności, powinieneś użyćStringBuilder
aappend()
, i tak:źródło
CharSequence
interfejs wyraźnie określatoString()
- 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łosujecieStringBuilder
może równie dobrze nie spełnić oczekiwań. To samo dotyczy każdego innego interfejsu, takiego jakList
lubSet
, w szczególności ichequals()
ihashCode()
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 ()
Chociaż jest to to samo, co
toString()
sprawdzanie wartości zerowejcharSequence
przed faktycznym wywołaniem funkcjiString.Jest to przydatne, gdy metoda może zwrócić wartość a
charSequence
lubnull
.źródło
charSequence
jest null, wówczas zwracany ciąg będzie"null"
i nie będzienull
.