Why can't I explicitly return void from a method?

Travis Webb picture Travis Webb · Oct 17, 2011 · Viewed 7.1k times · Source
void run() {
    ...
    if (done) return cancel();
    ...
}

where cancel() return void. This won't compile... and I can almost understand why. But if I want to return a void from a void, why not? Instead, I end up writing something like this:

if (done) {
    cancel();
    return;
}

I'm not looking for code style suggestions, I want to know why Java expressly prohibits this type of void return. Any info is appreciated, thanks.

Answer

Johan Sjöberg picture Johan Sjöberg · Oct 17, 2011

It's an interesting question. Since java enforces a return type (void is a return type) your first statement seems to make sense. I would take this only for convention. Since void is a placeholder and not an object, it was probably decided to leave it out for language coherency or compiler simplicity.

From JLS

A return statement with no Expression must be contained in the body of a method that is declared, using the keyword void, not to return any value (§8.4), or in the body of a constructor (§8.8).

further

To be precise, a return statement with no Expression always completes abruptly, the reason being a return with no value