When calling Gson.toJson(..., Appendable) and Appendable is not an instance of Writer, then Gson creates a CharSequence which does not fulfill the toString() requirements:
Returns a string containing the characters in this sequence in the same order as this sequence. The length of the string will be the length of this sequence.
Contrived example:
static class MyAppendable implements Appendable {
private final StringBuilder stringBuilder = new StringBuilder();
@Override
public Appendable append(char c) throws IOException {
stringBuilder.append(c);
return this;
}
@Override
public Appendable append(CharSequence csq) throws IOException {
if (csq == null) {
append("null");
} else {
append(csq, 0, csq.length());
}
return this;
}
public Appendable append(CharSequence csq, int start, int end) throws IOException {
if (csq == null) {
csq == "null";
}
// According to doc, toString() must return string representation
String s = csq.toString();
stringBuilder.append(s, start, end);
return this;
}
}
public static void main(String[] args) {
MyAppendable myAppendable = new MyAppendable();
new Gson().toJson("test", myAppendable);
// Prints `com.` (first 4 chars of `com.google.gson.internal.Streams.AppendableWriter.CurrentWrite`)
System.out.println(myAppendable.stringBuilder);
}
When calling
Gson.toJson(..., Appendable)andAppendableis not an instance ofWriter, thenGsoncreates aCharSequencewhich does not fulfill thetoString()requirements:Contrived example: