Proposal: single-expression method bodies

Zheka Kozlov orionllmain at
Thu Nov 23 07:24:24 UTC 2017

Sorry if I'm repeating what was already discussed before. I didn't find
anything about this in the old threads.

Currently, lambdas support two forms of bodies:

1. Function<Integer, String> func = (Integer i) -> i.toString();
2. Function<Integer, String> func = (Integer i) -> {
    return i.toString();

But for methods only the second form is supported:

public String func(Integer i) {
    return i.toString();

This seems unfair to me, and I think the first form should be supported too:

public String func(Integer i) -> i.toString()

Single-expression method bodies can reduce the amount of boilerplate:

public static int square(int x) -> x * x

// Simple getter
public int getSomeField() -> someField;

This will also be consistent with the two forms of switch (regular switch
and expression switch):

switch (o) {
    case Integer i: return i.toString();


String s = switch (o) {
    case Integer i -> i.toString();

What do you think?

More information about the amber-dev mailing list