Antworten:
Durch Aufrufen seiner toString()
Methode.
Gibt eine Zeichenfolge zurück, die die Zeichen in dieser Sequenz in derselben Reihenfolge wie diese Sequenz enthält. Die Länge der Zeichenfolge entspricht der Länge dieser Sequenz.
Hier gibt es ein subtiles Problem, das ein bisschen wie ein Gotcha ist.
Die toString()
Methode hat eine Basisimplementierung in Object
. CharSequence
ist eine Schnittstelle; und obwohl die toString()
Methode als Teil dieser Schnittstelle angezeigt wird, gibt es zur Kompilierungszeit nichts, was Sie dazu zwingt, sie zu überschreiben und die zusätzlichen Einschränkungen CharSequence
toString()
zu berücksichtigen , die das Javadoc der Methode für die Methode auferlegt toString()
. dh, dass es eine Zeichenfolge zurückgeben soll, die die Zeichen in der von zurückgegebenen Reihenfolge enthält charAt()
.
Ihre IDE hilft Ihnen nicht einmal, indem sie Sie daran erinnert, dass Sie sie wahrscheinlich überschreiben solltentoString()
. In Intellij sehen Sie dies beispielsweise, wenn Sie eine neue CharSequence
Implementierung erstellen : http://puu.sh/2w1RJ . Beachten Sie das Fehlen von toString()
.
Wenn Sie sich auf toString()
eine beliebige Version verlassen CharSequence
, sollte diese funktionieren, sofern der CharSequence
Implementierer seine Arbeit ordnungsgemäß ausgeführt hat. Wenn Sie jedoch Unsicherheiten vermeiden möchten, sollten Sie ein StringBuilder
und append()
wie folgt verwenden:
final StringBuilder sb = new StringBuilder(charSequence.length());
sb.append(charSequence);
return sb.toString();
CharSequence
Schnittstelle definiert explizit toString()
- der Implementierer wird dies nicht übersehen haben. Im Javadoc heißt es "Gibt eine Zeichenfolge zurück, die die Zeichen in dieser Sequenz in derselben Reihenfolge wie diese Sequenz enthält. Die Länge der Zeichenfolge entspricht der Länge dieser Sequenz" seit Beginn in 1.4 . Leute, bitte überprüfen Sie, was Sie upvote
StringBuilder
könnte genauso gut nicht das tun, was Sie erwarten. Gleiches gilt für alle anderen Schnittstellen wie List
oder Set
, insbesondere deren equals()
und hashCode()
Methoden, die ohne Überschreibungen kompiliert werden, aber vertraglich überschrieben werden müssen .
Sie können String.valueOf () direkt verwenden
String.valueOf(charSequence)
Dies ist jedoch dasselbe wie toString()
eine Nullprüfung, charSequence
bevor tatsächlich toString aufgerufen wird.
Dies ist nützlich, wenn eine Methode entweder a charSequence
oder null
value zurückgeben kann.
charSequence
null ist, ist die zurückgegebene Zeichenfolge "null"
und nicht null
.
setText(CharSequence)
nicht das, was Sie brauchen?