Відповіді:
Посилаючись на його toString()
метод.
Повертає рядок, що містить символи в цій послідовності в тому ж порядку, що і ця послідовність. Довжина рядка буде довжиною цієї послідовності.
Тут є тонка проблема, яка є дещо хиткою.
toString()
Метод має базову реалізацію в Object
. CharSequence
- інтерфейс; і хоча toString()
метод з'являється як частина цього інтерфейсу, в момент компіляції немає нічого, що змусить вас його перекрити і виконувати додаткові обмеження, які CharSequence
toString()
Javadoc методу накладає на toString()
метод; тобто він повинен повернути рядок, що містить символи в порядку, поверненому charAt()
.
Ваш IDE навіть не допоможе вам, нагадуючи, що ви, ймовірно, повинні перекрити toString()
. Наприклад, в Intellij це те, що ви побачите, якщо створити нову CharSequence
реалізацію: http://puu.sh/2w1RJ . Зверніть увагу на відсутність toString()
.
Якщо ви покладаєтесь на toString()
довільне CharSequence
, воно повинно працювати, якщо CharSequence
виконавець виконав свою роботу належним чином. Але якщо ви хочете взагалі уникнути невизначеності, вам слід скористатися символом a StringBuilder
і append()
, таким чином:
final StringBuilder sb = new StringBuilder(charSequence.length());
sb.append(charSequence);
return sb.toString();
CharSequence
інтерфейс явно визначає toString()
- реалізатор не пропустив це. У Javadoc стан «Повертає рядок , що містять символи в цій послідовності в тому ж порядку, що і цієї послідовності. Довжина рядка буде довжиною цієї послідовності» з моменту створення в 1.4 . Люди, будь ласка, перевірте, що Ви підтримуєте
StringBuilder
може так само не виконати те, що ви очікуєте. Те ж саме стосується будь-якого іншого інтерфейсу, наприклад, List
або Set
, зокрема, їх equals()
та hashCode()
методів, які збиратимуться без змін, але повинні бути скасовані відповідно до договору.
Ви можете безпосередньо використовувати String.valueOf ()
String.valueOf(charSequence)
Хоча це те саме, що toString()
він робить нульову перевірку charSequence
раніше, ніж насправді викликати toString.
Це корисно, коли метод може повернути charSequence
або null
значення, або значення.
charSequence
нуль, то повернутий рядок буде, "null"
а ні null
.
setText(CharSequence)
не роблять те, що потрібно?