I think the main thing that bugs me about this is that this makes a subclass default to having toString as its literal form. This begs for introducing a bug or security hole later, when we add more types or refactor code. I would be ok if hasLiteralForm would be abstract or default to false (as turning it to true is just an optimization).