Puis-je échapper des accolades dans un Java MessageFormat?

Je veux sortir des accolades dans un Java MessageFormat. Par exemple, je sais que ce qui suit ne fonctionne pas:

MessageFormat.format(" public {0} get{1}() {return {2};}\n\n", type, upperCamel, lowerCamel); 

Est-il possible d’échapper aux accolades entourant “return {2}”?

    Vous pouvez les mettre entre guillemets simples, par exemple

     '{'return {2};'}' 

    Voir ici pour plus de détails.

    Sensationnel. Surprise! La documentation de MessageFormat connaît la réponse:

    Dans une chaîne , "''" représente un seul devis. Un QuotedSsortingng peut contenir des caractères arbitraires à l’exception des guillemets simples; les guillemets simples environnants sont supprimés. Une chaîne UnquotedSsortingng peut contenir des caractères arbitraires, à l’exception des guillemets simples et des accolades gauches. Ainsi, une chaîne qui doit donner lieu au message formaté "'{0}'" peut être écrite comme "'''{'0}''" ou "'''{0}'''" .

    Utilisez des guillemets simples:

     MessageFormat.format(" public {0} get{1}() '{'return {2};'}'\n\n", type, upperCamel, lowerCamel); 

    Si vous souhaitez réellement utiliser un seul devis, doublez-le. Le JavaDoc pour MessageFormat donne cet exemple un peu compliqué:

    Ainsi, une chaîne qui doit donner lieu au message formaté "'{0}'" peut être écrite comme "'''{'0}''" or "'''{0}'''" .

    Ceci est '' pour une citation unique, puis '{' pour une accolade échappée, puis 0 , '}' pour l’accolade fermante et '' pour la citation finale.

     System.out.println(MessageFormat.format("I want to see ticks and curly braces around '''{'{0}'}'''", "this"));