Currently the only way to get the content of a Message object is to call its getFormattedMessage() method, which returns a String. This requires several temporary objects.
Proposal: introduce a new interface:
We can either let Message extend StringBuilderFormattable, or only let the current Message implementation classes implement this interface.
The first option is more elegant: downstream code does not need to use instanceof to detect if the formatTo() method is available. The downside is that user's custom Message implementations need to be modified and recompiled.
Having a separate interface for this method has the advantage that client code objects that implement this interface can be converted to text without allocating temp objects: