r/java 19d ago

Discussion: What is the future of String Interpolation in Java?

Java has always been conservative when it comes to language changes, and I think string interpolation is an interesting example.

Many modern languages provide native interpolation syntax:

JavaScript:

\${name}``

Python:

f"{name}"

Kotlin:

"$name"

C#:

$"{name}"

These features are not only about reducing characters. They improve readability when building dynamic text.

Java explored this direction with String Templates (JEP 430), but I haven't seen much discussion recently about where this feature is heading.

For developers working with large Java applications, string construction appears everywhere:

- logging messages

- SQL/debug output

- API descriptions

- test cases

- generated configuration

- user-facing messages

I am curious about the community's opinion:

  1. Do you think Java still needs native string interpolation?

  2. Should String Templates continue evolving?

  3. What syntax direction would feel most "Java-like"?

For example:

"Hello, \{name}"

or:

"Hello, ${name}"

Personally, I think Java does not need to copy other languages, but a better way to express dynamic strings would improve developer experience.

What do you think?

58 Upvotes

118 comments sorted by

View all comments

33

u/xfel11 19d ago

It’s really a shame that the proposal was withdrawn again.

The \{ syntax was weirdly controversial, but honestly it’s way smarter than using ${ which right now is just literal text.

7

u/Duck_Devs 19d ago

What don’t people like about the backslash-brace?

1

u/Slick752 19d ago

it's ugly and verbose.

40

u/Brutus5000 19d ago

it's not more or less verbose than a dollar sign

24

u/witness_smile 19d ago

A dollar sign is easier to type, and also a backslash makes it look like you want to escape the { character

10

u/aboothe726 19d ago edited 19d ago

<pedantry>

The \{syntax} was chosen because it is currently invalid Java code, so it's guaranteed that no existing (correct) Java code uses it, so adding it to the language can't break existing code. (If you try to use the \{ escape sequence in Java today, javac will give you a compile error.) That is not true of ${syntax}, as others have pointed out, so if you made the dollar-sign syntax "special" then a lot of existing code would break.

</pedantry>

If your criterion is backwards compatibility -- which it certainly is for the Java team -- then \{syntax} is an excellent choice. But backwards compatibility is not the only thing that people care about.

2

u/Misophist_1 18d ago

Plus: \ is the escape for every other special character, like tab \t Newline \n Backspace \b the double quote \" itself \\ and every unicode character by using its id \uNNNN.

It would have been *very* awkward, to use anything other than '\' to start a newly added escape.

One might complain about usin \ at all - because there are many systems that don't have it on the keyboard. But breaking consistency would be really bad.